用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