我已经浏览了一些关于stackflow的问题,但我不太了解许多复杂的解决方案,我刚刚在两周前开始研究。这是一个示例data.frame:
#rm(list = ls())
A= c(1,2,3)
B= c("Africa", "Asia", NA)
C= c("Tiger", "Bear", "Dog")
df = data.frame(A, B, C, stringsAsFactors=FALSE)
A B C
1 1 Africa Tiger
2 2 Asia Bear
3 3 <NA> Dog
我想合并我的列,看起来像这样:
A= c(1,2,3)
B= c("Africa", "Asia", NA)
C= c("Tiger", "Bear", "Dog")
D= c("1AfricaTiger", "2AsiaBear", "3Dog")
Howitshouldlook = data.frame(A, B, C, D, stringsAsFactors = FALSE)
A B C D
1 Africa Tiger 1AfricaTiger
2 Asia Bear 2AsiaBear
3 <NA> Dog 3Dog
我尝试的是:
df$D <- with(df, paste(df$A, df$B, df$C))
遗憾的是结果
A B C D
1 Africa Tiger 1 Africa Tiger
2 Asia Bear 2 Asia Bear
3 <NA> Dog 3 NA Dog
我已经读过NA通常是一个问题,但我似乎没有找到一个简单的解决方案。有人可以将我链接到初学者和#39;解决方案或者向我解释如何在没有&#34; NA&#34;的情况下合并细胞。以及没有空白?
非常感谢! 斯蒂菲
答案 0 :(得分:2)
您可以尝试此代码
test<- function(str){
ifelse(is.na(str), "", str)
}
df$D <- with(df, paste0(test(df$A), test(df$B), test(df$C)))
它提供此输出
> df
A B C D
1 1 Africa Tiger 1AfricaTiger
2 2 Asia Bear 2AsiaBear
3 3 <NA> Dog 3Dog
答案 1 :(得分:2)
replace
函数可用于整个data.frame:
do.call(paste0, replace(df, is.na(df), ""))
#[1] "1AfricaTiger" "2AsiaBear" "3Dog"
答案 2 :(得分:0)
> data.frame(df, D=apply(df, 1, function(x) paste(na.omit(x),collapse="") ))
A B C D
1 1 Africa Tiger 1AfricaTiger
2 2 Asia Bear 2AsiaBear
3 3 <NA> Dog 3Dog