我有一个包含许多列的数据框(df),其中一些包含分类数据,而另一些包含数字数据。我想将“d”列的值定义为两列(“a”和“b”)的值的组合(一个带有分类数据,另一个带有数字数据)。
例如,“a”列第 1 行具有分类数据值“h”,“b”列第 1 行具有数字数据值“76”。我希望列 'd' 第 1 行具有值 'h76'
任何帮助将不胜感激。
dfrm$d <- apply(dfrm, 1, paste0)
如果某些数字列具有长十进制表示,这可能会产生不令人满意的结果。您真的应该发布一个可重现的示例,最好通过编辑您的问题并插入dput(head(datfrm))
.
像这样:
df$d <- paste0(df$a, df$b)
如果像一些你不喜欢看到太多的人一样,df$
你也可以这样做:
df <- transform(df, d <- paste0(a, b))
你可以试试这个。
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
。
约翰说服我将此作为单独的答案输入,即使它与他的答案高度相关。
interaction(test$a, test$b, drop=TRUE, sep="", lex.order=TRUE)
这将返回与以下相同的值:
factor(paste0(test$a, test$b))
(如果 test$a 是无序的,我认为因子水平也将是相同的顺序。)
使用因子通常优于字符(但并非总是如此)。