r - 如何在 R 中移动数据帧的内容?

标签 r

我想获取以下数据框:

     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_ ,但我找不到一个优雅的答案。在我的研究中,我无法在任何地方找到这个答案,但如果我错过了,我很高兴能找到答案。谢谢大家。

最佳答案

可以使用

applyMARGIN=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/

相关文章:

r - 从父脚本中启动第二个 R 脚本

java - 用Java将两个矩阵相乘

R 以编程方式更改 IP 地址

r - mongolite - 聚合方法的正确语法

替换字符串中第四次出现的字符

r - 为 dplyr 中的每个函数保存 na.rm=TRUE

r - 使用 misc3d 绘制平滑的隐式曲面

mysql - 在 foreach 中使用 %dopar% 写入数据帧

r - 如何根据该列值中是否存在字符串来替换该列中某些索引处的值(使用 dplyr 并重复而不循环)?

r - 在 R 中的 tm_map(testfile, removeNumbers) 中使用过滤器?