【发布时间】:2022-01-03 01:36:26
【问题描述】:
我有一个包含大约 50 个重叠列的数据框,我需要将它们组合起来。下面是数据框的外观(大约 150 行长,数百列)
ID PAI_Q1.y PAI_Q1.x
540 0 NA
680 1 NA
240 NA 2
330 NA 3
对于单列,以下代码完美运行:
qualtrics <- qualtrics %>%
mutate(PAI_Q1 = ifelse(is.na(PAI_Q1.y), PAI_Q1.x, PAI_Q1.y))
但是,我在将其写入需要转换的所有行(即 PAI_Q2、PAI_Q3 等)的循环或函数中时遇到了问题。以下是我迄今为止所做的两次尝试。有没有人对让我迭代地完成这个基本任务的调整(或知道存在的函数)有什么建议?
尝试 #1
mutate_col <- function(data, string, string.x, string.y){
data <- data %>% mutate(string = ifelse(is.na(string.y), string.x, string.y))
}
Error: Problem with `mutate()` column `string`.
ℹstring = ifelse(is.na(string.y), string.x, string.y)。
未找到 x 对象“PAI_Q1.y”
尝试 #2
for (i in 1:colnames(df)){
if(names(i) %in% list_of_cols){ #list of columns that must be combined
y <- paste(i, ".y", sep = "")
x <- paste(i, ".x", sep = "")
df <- df %>% mutate(i = ifelse(is.na(y), x, y))
}
}
ID PAI_Q1.y PAI_Q1.x i.1
540 0 NA PAI.Q1.y
680 1 NA PAI.Q1.y
240 NA 2 PAI.Q1.y
330 NA 3 PAI.Q1.y
【问题讨论】:
-
dplyr::coallesce()会一次性给你想要的吗? -
看起来您将“ID”上的两个表连接在一起,然后这些列被命名为
*.x和*.y。是否有任何理由不堆叠表格,过滤掉 NA 值,然后按 ID 排序?那个或接近的东西可能更容易。