我想获取以下数据框:
loc1 loc2 loc3 1 <NA> Subcortical Basal ganglia 2 Cortical Subcortical Basal ganglia 3 <NA> Subcortical <NA>
并将内容转移到以下内容:
loc1 loc2 loc3 1 Subcortical Basal ganglia <NA> 2 Cortical Subcortical Basal ganglia 3 Subcortical <NA> <NA>
我尝试过如下的 ifelse 语句,但它太复杂了:
test$loc1 <- ifelse(is.na(test$loc1) & !is.na(test$loc2), "Subcortical", "Cortical") test$loc2 <- ifelse(test$loc1=="Subcortical", NA, "Subcortical") test$loc2 <- ifelse(is.na(test$loc2) & !is.na(test$loc3), "Basal ganglia", "Subcortical")
我还尝试过 tidyr 包中的 unite 和 unite_ ,但我找不到一个优雅的答案。在我的研究中,我无法在任何地方找到这个答案,但如果我错过了,我很高兴能找到答案。谢谢大家。
最佳答案
可以使用
apply
和 MARGIN=1
(如@David Arenburg 在评论中所示)来循环遍历行
df1[] <- apply(df1, 1, function(x) x[order(is.na(x))])
或者
df1[] <- t( apply(df1, 1, function(x) c(x[!is.na(x)], x[is.na(x)])))
df1
# loc1 loc2 loc3
#1 Subcortical Basal ganglia <NA>
#2 Cortical Subcortical Basal ganglia
#3 Subcortical <NA> <NA>
数据
df1 <- structure(list(loc1 = c(NA, "Cortical", NA),
loc2 = c("Subcortical",
"Subcortical", "Subcortical"), loc3 = c("Basal ganglia",
"Basal ganglia", NA)), .Names = c("loc1", "loc2", "loc3"),
class = "data.frame", row.names = c("1", "2", "3"))
关于r - 如何在 R 中移动数据帧的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29479090/