我有一个包含多个列的数据框(df),其中一些包含分类数据,另一些包含数字数据。我想将列'd'的值定义为两列('a'和'b')的值的组合(一列具有分类数据,另一列具有数值数据)。
e.g。列'a'第1行具有分类数据值'h',列'b'第1行具有数字数据值'76'。我希望列'd'第1行的值为'h76'
非常感谢任何帮助。
答案 0 :(得分:2)
dfrm$d <- apply(dfrm, 1, paste0)
如果某些数字列具有长十进制表示,则可能会产生令人不满意的结果。您应该发布一个可重现的示例,最好通过编辑问题并插入dput(head(datfrm))
的输出来完成。
答案 1 :(得分:2)
像这样:
df$d <- paste0(df$a, df$b)
如果像某些人一样,你不喜欢看到太多df$
,你也可以这样做:
df <- transform(df, d <- paste0(a, b))
答案 2 :(得分:1)
你可以试试这个。
mydatf$d <- factor(mydatf$a):factor(mydatf$b)
例如
a <- c('h','l','l','h','h')
b <- 1:5
factor(a):factor(b)
1] h:1 l:2 l:3 h:4 h:5
Levels: h:1 h:2 h:3 h:4 h:5 l:1 l:2 l:3 l:4 l:5
这与其他答案非常不同,因为它必然产生一个因子而不是字符变量。这也是:
稍后在建模公式中所做的部分介绍。例如,请注意变量的级别。这可能是最好的答案,也可能是一个糟糕的答案,具体取决于你想要这个新变量的内容。此外,如果列a
已经是一个因素,您可以将factor(mydatf$a)
更改为datf$a
。在data.frame
对象中通常就是这种情况。
答案 3 :(得分:1)
interaction(test$a, test$b, drop=TRUE, sep="", lex.order=TRUE)
返回与以下相同的值:
factor(paste0(test$a, test$b))
(如果测试$ a是无序的,我认为因子水平也将是相同的顺序。)
使用因子通常优先于字符(但并非总是如此)。