首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个变量组合为新变量/拆分变量为3个变量

将多个变量组合为新变量/拆分变量为3个变量
EN

Stack Overflow用户
提问于 2020-02-18 17:57:36
回答 2查看 84关注 0票数 0

我需要创建一个'key‘变量,因为我想组合两个数据集。

Dataset1有变量ymd

Dataset2有三个变量ymd

代码语言:javascript
复制
ymd  (20050516,20060512)  
y(2005,2006)  
m(05,05)
d(16,12)                                              

有两种选择:

d.

  1. 将y、m和d组合成变量,
  2. 列表项将变量ymd组合成三个变量ymymd
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 18:36:14

假设您有两个数据框架:

代码语言:javascript
复制
df1 <- data.frame(
  ymd = c(20050516,20060512),
  x = c(1,2)
)

df2 <- data.frame(
  y = c(2005,2006),  
  m = c('05','05'),
  d = c(16,12),
  z = c(5,10)
)

您可以通过使用ymd元素粘贴在一起并更改为数字来进行合并:

代码语言:javascript
复制
df2 %>%
  mutate(
    ymd = as.numeric(paste0(y,m,d))
  ) %>%
  left_join(df1)

输出:

代码语言:javascript
复制
>
Joining, by = "ymd"
     y  m  d  z      ymd x
1 2005 05 16  5 20050516 1
2 2006 05 12 10 20060512 2

您可以根据需要调整合并(如right_join)。

票数 1
EN

Stack Overflow用户

发布于 2020-02-18 18:36:51

这里有一个例子。

我使用变量作为字符串而不是数字,这使它更容易。您可以像在我的示例中一样使用as.character()来转换它。

对于选项1,我只使用paste0()将文本粘贴在一起。

对于选项2,我使用substr()在corect位置剪切文本。

如果需要输出为数字而不是字符串,只需像我在打印函数中那样使用as.numeric()

这是代码,如果您有进一步的问题,请告诉我:

代码语言:javascript
复制
ymd=as.character(c(20050516,20060512))
y=as.character(c(2005,2006))
m=as.character(c(05,05))
d=as.character(c(16,12))

## Concatenade y, m, and d together
ymd_concatenated=paste0(y,m,d)
print(as.numeric(ymd_concatenated))

## Split ymd into single variables
y_concatenated=c()
m_concatenated=c()
d_concatenated=c()
for (date in ymd)
{
  y_concatenated=c(y_concatenated,substr(date,1,4))
  m_concatenated=c(m_concatenated,substr(date,5,6))
  d_concatenated=c(d_concatenated,substr(date,7,8))
}
print(y_concatenated)
print(m_concatenated)
print(d_concatenated)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60286877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档