[英]R Why is paste replacing characters with digits?
在给定的R代码中...
df1 <- c("a","b","a","b","b","c","b","c","c","d","c","d")
dim(df1) = c(4,3)
df1 <- as.data.frame(t(df1))
for (i in 1:nrow(df1)) {
df1[i,"paste"] <- paste(df1[i,!names(df1) %in% c("paste")],collapse="")
}
...我希望看到:
V1 V2 V3 V4 paste
a b a b abab
b c b c bcbc
c d c d cdcd
...但是却看到:
V1 V2 V3 V4 paste
a b a b 1111
b c b c 2222
c d c d 3333
这似乎是微不足道的,而且我不明白代码有什么问题。 谁能解释我的代码如何产生给定的输出? 另外,关于如何产生我想要的简单输出的任何其他想法? 谢谢。
另一个使用unite()
选项,方便的功能是从tidyr
多列粘贴到一起
library(tidyr)
unite(df1, paste, V1:V4, sep = "", remove = FALSE)
这使:
# paste V1 V2 V3 V4
#1 abab a b a b
#2 bcbc b c b c
#3 cdcd c d c d
原因是df1[i,!names(df1) %in% c("paste")]
返回一个数据帧。 您可以取消列出数据框,以使paste
正常工作:
for (i in 1:nrow(df1)) {
df1[i,"paste"] <- paste(unlist(df1[i,!names(df1) %in% c("paste")]),collapse="")
# ^^^^^^
}
df1
# V1 V2 V3 V4 paste
#1 a b a b abab
#2 b c b c bcbc
#3 c d c d cdcd
如果df1
包含因子变量,则这是在数据帧上paste
方式:
paste(df1[1:4], collapse = "")
# [1] "1:31:31:31:3"
或者,这也应该为您工作:
df1$paste = do.call(paste0, df1[1:4])
使用dplyr可能更具可读性,没有for循环:
df1 %>%
mutate(paste = paste0(V1,V2,V3,V4))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.