我有一张桌子:
> head(TiposMotivA)
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21
1 5 4 4 4 6 6 7 6 4 6 6 6 4 4 4 4 6 7 4 4 6
2 5 4 4 5 5 5 5 5 5 5 7 5 4 3 1 6 6 5 6 7 7
3 4 5 4 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5
4 5 5 7 7 4 6 6 6 7 7 6 7 7 6 6 7 4 7 6 6 7
5 6 1 7 6 7 7 7 7 7 7 6 7 2 2 3 6 3 7 7 7 7
6 4 4 3 3 4 5 4 3 4 7 6 6 4 4 6 4 5 7 6 6 7
Run Code Online (Sandbox Code Playgroud)
这是它的看法:
> dput(head(TiposMotivA))
structure(list(Q1 = c(5L, 5L, 4L, 5L, 6L, 4L), Q2 = c(4L, 4L,
5L, 5L, 1L, 4L), Q3 = c(4L, 4L, 4L, 7L, 7L, 3L), Q4 = c(4L, 5L,
4L, 7L, 6L, 3L), Q5 = c(6L, 5L, 5L, 4L, 7L, 4L), Q6 = c(6L, 5L,
4L, 6L, 7L, 5L), Q7 = c(7L, 5L, 5L, 6L, 7L, 4L), Q8 = c(6L, 5L,
4L, 6L, 7L, 3L), Q9 = c(4L, 5L, 5L, 7L, 7L, 4L), Q10 = c(6L,
5L, 4L, 7L, 7L, 7L), Q11 = c(6L, 7L, 5L, 6L, 6L, 6L), Q12 = c(6L,
5L, 4L, 7L, 7L, 6L), Q13 = c(4L, 4L, 5L, 7L, 2L, 4L), Q14 = c(4L,
3L, 4L, 6L, 2L, 4L), Q15 = c(4L, 1L, 5L, 6L, 3L, 6L), Q16 = c(4L,
6L, 4L, 7L, 6L, 4L), Q17 = c(6L, 6L, 5L, 4L, 3L, 5L), Q18 = c(7L,
5L, 4L, 7L, 7L, 7L), Q19 = c(4L, 6L, 5L, 6L, 7L, 6L), Q20 = c(4L,
7L, 4L, 6L, 7L, 6L), Q21 = c(6L, 7L, 5L, 7L, 7L, 7L)), .Names = c("Q1",
"Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11",
"Q12", "Q13", "Q14", "Q15", "Q16", "Q17", "Q18", "Q19", "Q20",
"Q21"), row.names = c(NA, 6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
我需要新的是使用此表列创建另一个表.它必须具有以下结构:列A值来自列Q1和Q11的平均值列B值来自列Q10和Q21的平均值
最终结果预计是:
A B
1 5.5 6
2 6 6
3 4.5 4.5
4 5.5 7
5 6 7
6 5 7
Run Code Online (Sandbox Code Playgroud)
为了帮助您理解,计算方法是:
1A = (6 + 5) / 2
1B = (6 + 6) / 2
And so on...
Run Code Online (Sandbox Code Playgroud)
有没有我可以用来做这个功能?
我认为这个会做的伎俩,但我错了......
> c(mean(c(TiposMotivA$Q1,TiposMotivA$Q11)),mean(c(TiposMotivA$Q11,TiposMotivA$Q21)))
[1] 5.645161 6.395161
Run Code Online (Sandbox Code Playgroud)
但是,不是计算每行的平均值,而是从每行中的所有值取平均值,然后计算平均值.然后我尝试了这个:
Teste$A <- tapply(TiposMotivA$Q1,TiposMotivA$Q11,mean)
Teste$B <- tapply(TiposMotivA$Q10,TiposMotivA$Q21,mean)
Run Code Online (Sandbox Code Playgroud)
再没有成功......我知道我必须远离我的需要,所以我寻求帮助......任何线索都会非常感激!
解决方案dplyr:
library(dplyr) #load library
new_df <- df %>%
#use mutate to create the mean columns
mutate(A=(Q1+Q11)/2, B=(Q10+Q21)/2 ) %>%
select(A,B) #only select A and B which you need
Run Code Online (Sandbox Code Playgroud)
要么
new_df <- transmute(df, A=(Q1+Q11)/2, B=(Q10+Q21)/2)
Run Code Online (Sandbox Code Playgroud)
产量
new_df
A B
1 5.5 6.0
2 6.0 6.0
3 4.5 4.5
4 5.5 7.0
5 6.0 7.0
6 5.0 7.0
Run Code Online (Sandbox Code Playgroud)