1

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

例如,“a”列第 1 行具有分类数据值“h”,“b”列第 1 行具有数字数据值“76”。我希望列 'd' 第 1 行具有值 'h76'

任何帮助将不胜感激。

4

4 回答 4

2
dfrm$d <- apply(dfrm, 1, paste0)

如果某些数字列具有长十进制表示,这可能会产生不令人满意的结果。您真的应该发布一个可重现的示例,最好通过编辑您的问题并插入dput(head(datfrm)).

于 2013-01-02T01:08:03.990 回答
2

像这样:

df$d <- paste0(df$a, df$b)

如果像一些你不喜欢看到太多的人一样,df$你也可以这样做:

df <- transform(df, d <- paste0(a, b))
于 2013-01-02T01:21:17.640 回答
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

这与其他答案非常不同,因为它必然会产生一个与字符变量相反的因子。它也是:稍后在建模公式中所做的部分介绍。例如,注意变量的级别是什么。这可能是最好的答案,也可能是一个糟糕的答案,这取决于您想要这个新变量的用途。此外,如果 columna已经是一个因素,您可以更改factor(mydatf$a)为 just datf$a。对象中经常出现这种情况data.frame

于 2013-01-02T01:21:27.960 回答
1

约翰说服我将此作为单独的答案输入,即使它与他的答案高度相关。

interaction(test$a, test$b, drop=TRUE, sep="", lex.order=TRUE)

这将返回与以下相同的值:

factor(paste0(test$a, test$b))

(如果 test$a 是无序的,我认为因子水平也将是相同的顺序。)

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

于 2013-01-02T02:03:03.170 回答