对于名为“Submit.and.module”的列中具有值“Separate”的行,我想在其正上方插入一行,并将数据从某些列移动到该新行。
具体来说,我想将名为“Submit.help”和“Strategy”的列中的数据移动到上面的新行。
现在我的数据如下所示:
我希望数据看起来像这样:
我该怎么做?
最佳答案
我想加入另一个解决方案。
数据
data <- data.frame(Which.mod = c("TMH", "TMH-C", "TMH", "FC", "FC"),
Mod.time = c(1.43, 2.31, 0.67, 2.35, 8.22),
Submit.help = c(NA, "Help", NA, NA, "Submit"),
Strategy = c(NA, "Ratio", NA, NA, "Count"),
Submit.and.module = c(NA, "Separate", NA, NA, "Separate"))
基础R
第 1 步:创建一个 ID 列和一个新数据框,该数据框是要分隔的行的子集。
data$id <- 1:nrow(data)
data1 <- subset(data, !is.na(Submit.and.module))
第2步:将适当的列设置为NA并绑定(bind)数据框
data[, c("Submit.help", "Strategy")] <- NA
data1[, c("Which.mod", "Mod.time", "Submit.and.module")] <- NA
第三步:绑定(bind)数据框并排序。
final <- rbind(data1, data)
final.ordered <- df1[order(df1$id), ]
# Which.mod Mod.time Submit.help Strategy Submit.and.module id
# 1 TMH 1.43 <NA> <NA> <NA> 1
# 2 <NA> NA Help Ratio <NA> 2
# 21 TMH-C 2.31 <NA> <NA> Separate 2
# 3 TMH 0.67 <NA> <NA> <NA> 3
# 4 FC 2.35 <NA> <NA> <NA> 4
# 5 <NA> NA Submit Count <NA> 5
# 51 FC 8.22 <NA> <NA> Separate 5
Tidyverse
又好又简单 跟随。与上面的步骤相同,但尽可能链接。
library(tidyverse)
dat1 <- data %>% mutate(id = 1:n(), Submit.help = NA, Strategy = NA)
dat2 <- data %>% mutate(id = 1:n()) %>%
filter(!is.na(Submit.and.module)) %>%
mutate(Which.mod = NA, Mod.time = NA, Submit.and.module = NA)
final <- rbind(dat2, dat1) %>% arrange(id)
关于r - 如何在R中将一行数据分成两行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53506817/