繁体   English   中英

R为什么用数字粘贴替换字符?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM