用R中的动态变量寻址另一个数据帧(理想情况下是dplyr,使用mutate)
我已经阅读了关于动态命名变量的各种线程,但是我找不到答案 我有两个数据帧用R中的动态变量寻址另一个数据帧(理想情况下是dplyr,使用mutate),r,dynamic,dplyr,R,Dynamic,Dplyr,我已经阅读了关于动态命名变量的各种线程,但是我找不到答案 我有两个数据帧 df <- data.frame(qno=c(1,2,3,4)) ref <- data.frame(Q1 = c(1:20),Q2 = c(21:40),Q3=c(41:60),Q4 = c(61:80)) df这能解决您的问题吗 ref <- data.frame(Q1 = c(1:20),Q2 = c(21:40),Q3=c(41:60),Q4 = c(61:80)) out <- data
df <- data.frame(qno=c(1,2,3,4))
ref <- data.frame(Q1 = c(1:20),Q2 = c(21:40),Q3=c(41:60),Q4 = c(61:80))
df这能解决您的问题吗
ref <- data.frame(Q1 = c(1:20),Q2 = c(21:40),Q3=c(41:60),Q4 = c(61:80))
out <- data.frame(qno=c(1,2,3,4), average = c(10.5,30.5,50.5,70.5))
df <- data.frame(qno=c(1:length(ref)))
for (i in seq_along(ref)) {
df$average[i] <- mean(ref[[i]], na.rm = T)
}
ref这里有mutate
:
df %>% mutate(average = t(ref %>% summarise(across(everything(), ~mean(.x, na.rm = TRUE)))))
qno average
1 1 10.5
2 2 30.5
3 3 50.5
4 4 70.5
但是,如果您希望名称来自ref
,则可以使用它,而不必完全进行变异:
t(ref %>% summarise(across(everything(), list(mean), .names = "{.col}"))) %>%
data.frame() %>%
rename(average = 1)
average
Q1 10.5
Q2 30.5
Q3 50.5
Q4 70.5
非常感谢,真的!理想情况下,我想知道如何使用ref数据帧的名称(就像在我的尝试中一样),但我真的很高兴我现在有了一些可以工作的东西!真喜欢这种方法!你知道如何在你的第一个建议的解决方案中给均值函数提供na.rm=TRUE参数吗?是的!您将用~mean(.x,na.rm=TRUE)
替换列表(平均值)
。也许一开始就应该这么做。更新我的答案!
df <- df %>%
mutate(average = mean(as.name(paste0("ref$Q",qno))))```.
ref <- data.frame(Q1 = c(1:20),Q2 = c(21:40),Q3=c(41:60),Q4 = c(61:80))
out <- data.frame(qno=c(1,2,3,4), average = c(10.5,30.5,50.5,70.5))
df <- data.frame(qno=c(1:length(ref)))
for (i in seq_along(ref)) {
df$average[i] <- mean(ref[[i]], na.rm = T)
}
df <- data.frame(qno = paste0("Q", c(1:length(ref))))
df %>% mutate(average = t(ref %>% summarise(across(everything(), ~mean(.x, na.rm = TRUE)))))
qno average
1 1 10.5
2 2 30.5
3 3 50.5
4 4 70.5
t(ref %>% summarise(across(everything(), list(mean), .names = "{.col}"))) %>%
data.frame() %>%
rename(average = 1)
average
Q1 10.5
Q2 30.5
Q3 50.5
Q4 70.5