R 粘贴数据帧而不更改为因子级别
我有向量,比如a,b,c,d,如下所示:R 粘贴数据帧而不更改为因子级别,r,dataframe,paste,R,Dataframe,Paste,我有向量,比如a,b,c,d,如下所示: a <- c(1,2,3,4) b <- c("L","L","F","L") c <- c(11,22,33,44) d <- c("Y", "N", "Y","Y") 然后我把它换成这个,比方说df: df <- data.frame(a,b,c,d) 我的问题是: (1) 有人能给我解释一下为什么在df中它会把元素变成数字吗? (2) 是否有其他方法可以使用df获得输出(1)?这里是您使用的方法的替代方法:
a <- c(1,2,3,4)
b <- c("L","L","F","L")
c <- c(11,22,33,44)
d <- c("Y", "N", "Y","Y")
然后我把它换成这个,比方说df:
df <- data.frame(a,b,c,d)
我的问题是:
(1) 有人能给我解释一下为什么在df中它会把元素变成数字吗?
(2) 是否有其他方法可以使用df获得输出(1)?这里是您使用的方法的替代方法:
df_call <- c(df, sep="$")
paste(do.call(paste, df_call), collapse="%")
[1] "1$L$11$Y%2$L$22$N%3$F$33$Y%4$L$44$Y"
df_call您不能直接将paste
应用于您案例中的数据帧,要获得所需的输出,您需要在两个级别应用paste
paste(apply(df, 1, function(x) paste(x, collapse = "$")), collapse = "%")
#[1] "1$L$11$Y%2$L$22$N%3$F$33$Y%4$L$44$Y"
其中,apply
命令创建行向量
apply(df, 1, function(x) paste(x, collapse = "$"))
#[1] "1$L$11$Y" "2$L$22$N" "3$F$33$Y" "4$L$44$Y"
下一个paste
命令将所有这些与collapse
参数合并为“%”paste
在其参数上运行as.character
(或内部类似的内容)…
有效地取消了列表中的搜索。看看
as.character(df)
# [1] "c(1, 2, 3, 4)" "c(2, 2, 1, 2)" "c(11, 22, 33, 44)" "c(2, 1, 2, 2)"
deparse(df$a)
# [1] "c(1, 2, 3, 4)"
您的代码正在将这些值粘贴在一起。要解决这个问题,您可以使用do.call
do.call(paste, c(df, sep = "$", collapse = "%"))
# [1] "1$L$11$Y%2$L$22$N%3$F$33$Y%4$L$44$Y"
以下是一种dplyr
方法:
pull(summarise(unite(df, tmp, 1:ncol(df), sep="$"), paste(tmp, collapse="%")))
或:
do.call(paste, c(df, sep = "$", collapse = "%"))
# [1] "1$L$11$Y%2$L$22$N%3$F$33$Y%4$L$44$Y"
pull(summarise(unite(df, tmp, 1:ncol(df), sep="$"), paste(tmp, collapse="%")))
df %>%
unite(tmp, 1:ncol(df),sep="$") %>%
summarise(output = paste(tmp, collapse="%")) %>%
pull()