R:如何在向量中的每个项目中重复R中的操作?

时间:2016-12-05 21:12:50

标签: r

我对此有点新意,所以我会尽量让它变得清晰。

我有一个由5个向量组成的数据框。第一个包含国家/地区名称,另外5个是来自调查的值。每行代表某人对所述调查给出的答案。

Country     V1  V2  V3  V4  V5
Canada       1   2   4   1   2
Canada       1   3   2   2   3
Switzerland  3   1   1   1   1
Switzerland  1   4   3   4   2

我想创建一个代码,汇总调查问题的结果,然后计算数据框中每个国家/地区的平均值,这样每个国家/地区最终只有一个值。

vAggregateCan <- (V1 + V2 + V3 + V4 + V5)/5

canValue <- mean(vAggregateCan)

我想最终得到一个新的数据框,其中只包含我的初始数据框中每个国家/地区的一个条目,该条目与我作为示例显示的代码所产生的值相关联。这应该是这样的。

Country      Value
Canada       canValue
Switzerland  swissValue

问题是,我不知道如何告诉R只汇总特定国家/地区的值,我想尽可能简单地找到一种方法来执行该操作,而无需重复相同的操作。结束了。

就像我说的那样,我有点新鲜,而且我不确定我的问题是否清楚。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

由于您要执行多项操作,因此链接不是完全相同的。我们将1)找到每个国家的平均值,2)找到每行的平均值。最直接的方法是使用base函数。

df2 <- aggregate(. ~ Country, data=df1, mean)
data.frame(Country=df2$Country, Mean=rowMeans(df2[-1]))
#       Country Mean
# 1      Canada  2.1
# 2 Switzerland  2.1

data.tabledplyr软件包可以运行,但是它们需要额外的环节才能跳过,因为它们的构建是为了最好地按列工作。 See this explanation for more on why row-wise operations are discouraged

但是如果你需要使用这些包:

library(data.table)
setDT(df1)[, .(Mean = rowMeans(.SD)), by=Country][, .(Mean=mean(Mean)), by=Country]
#        Country Mean
# 1:      Canada  2.1
# 2: Switzerland  2.1

library(dplyr)
df1 %>% group_by(Country) %>% 
  summarise_all(mean, na.rm=TRUE) %>%
  rowwise() %>% do(data.frame(Country=.$Country, Mean=rowMeans(.[,-1])))  
#       Country Mean
# 1      Canada  2.1
# 2 Switzerland  2.1

答案 1 :(得分:-1)

df <- data.frame(v1, v2, v3, v4, v5) means <- apply(df, 1, mean)

您可以使用data.frame()功能创建数据框,我建议使用dplyr的data_frame()apply()函数允许您在任一行上使用函数(将第二个参数设置为1)或列(将第二个参数设置为2),然后将您想要的函数用作第三个参数。

答案 2 :(得分:-1)

rowMeans函数可以提供一组行方式,然后tapply可以在这些国家/地区值中聚合:

tapply( rowMeans(df[-1]), df[['Country']], mean)
     Canada Switzerland 
        2.1         2.1 

如果您需要索引该对象以提取单个值,则:

tapply( rowMeans(df[-1]), df[['Country']], mean)['Canada']
Canada 
   2.1