合并数据框列值(分类和数字)

时间:2013-01-02 00:39:24

标签: r dataframe

我有一个包含多个列的数据框(df),其中一些包含分类数据,另一些包含数字数据。我想将列'd'的值定义为两列('a'和'b')的值的组合(一列具有分类数据,另一列具有数值数据)。

e.g。列'a'第1行具有分类数据值'h',列'b'第1行具有数字数据值'76'。我希望列'd'第1行的值为'h76'

非常感谢任何帮助。

4 个答案:

答案 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是无序的,我认为因子水平也将是相同的顺序。)

使用因子通常优先于字符(但并非总是如此)。