繁体   English   中英

将最小值,平均值和最大值的列添加到数据框

Adding columns for min, mean, and max to a data frame

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我将脚趾伸入R并希望做一些看似简单的事情,但是我对如何进行操作有些迷茫。 我正在读取看起来像这样的CSV:

translation,category,macrocategory,subcategory,1640,1641,1642,1643,1644
almonds,nuts,Flavoring/Other,,,491,,,
apples,Fruit,Fruits and Vegetables,42,,67,,,
Atlantic herring,Fish,Meat,,52,0,9,,
aurochs,Meat,Meat,game,,4,25,5,
bacon,Meat,Meat,pork,,275.87,78,92,0
barley groats,Grain,Grain,5,9,2,14,56,9
beef,Meat,Meat,Beef,,5.25,,,

我想要的是为每个食品的最大值,最小值和均值添加新列 (因此,每行的 max,min和均值)。 我已经处理了一些基本的清理工作,但是我对如何从那里进行清理有些迷惑。

library(dplyr)
library(tidyr)

df <- read.csv("foods.csv", sep=",", header = T)
food.clean <- data.frame(foodname=df[,1], data.matrix(df[,5:53]))
str(food.clean) # check

food.clean <- food.clean[rowSums(is.na(food.clean)) < 48, ]
summary(food.clean)

我也尝试使用matrixStats包,但遇到错误:

library(matrixStats)
food.matrix <- as.matrix(food.clean)
cbind(food.clean, mean=rowMeans(food.matrix), sd=rowSds(food.matrix), max=rowMaxs(food.matrix))

Error in rowMeans(food.matrix) : 'x' must be numeric

有指针吗? 谢谢!

2 个回复

我想您想获取每一行所有数字变量的均值,最小值和最大值。

如果您有很多数值变量,则可以按照http://www.jstatsoft.org/v59/i10/中的说明先整理数据,这样会更容易

例如,您可以执行以下操作。

library(dplyr)
library(tidyr)

df <- read.csv(text="
translation,category,macrocategory,subcategory,1640,1641,1642,1643,1644
almonds,nuts,Flavoring/Other,,,491,,,
apples,Fruit,Fruits and Vegetables,42,,67,,,
Atlantic herring,Fish,Meat,,52,0,9,,
aurochs,Meat,Meat,game,,4,25,5,
bacon,Meat,Meat,pork,,275.87,78,92,0
barley groats,Grain,Grain,5,9,2,14,56,9
beef,Meat,Meat,Beef,,5.25,,,"
)

info <- 
    df %>%
    # tidy data
    gather(variable, value, -(1:4)) %>%
    # summarise by food item 'translation'
    group_by(translation) %>%
    summarise(
        mean = mean(value, na.rm=TRUE),
        min = min(value, na.rm=TRUE),
        max = max(value, na.rm=TRUE)
    )

这会给你

       translation      mean    min    max
1          almonds 491.00000 491.00 491.00
2           apples  67.00000  67.00  67.00
3 Atlantic herring  20.33333   0.00  52.00
4          aurochs  11.33333   4.00  25.00
5            bacon 111.46750   0.00 275.87
6    barley groats  18.00000   2.00  56.00
7             beef   5.25000   5.25   5.25    

如果仍然需要原始数字变量,则可以将此infodf结合在一起。

df %>% left_join(info)

有关更多详细信息,我强烈建议您阅读整洁的数据文件并研究dplyrtidyr软件包。

尚不清楚样品数据的样子(具体来说,标题行中的1640,1641,1642,1643,1644)是什么,但这应该向您展示使用mtcars样品数据集的一种方法。 如果您可以dput实际数据,则将更容易获得帮助。 具体来说,您可以使用dplyr::rowwise

library(dplyr)
df <- tbl_df(mtcars)

head(df)
# Source: local data frame [6 x 11]
# 
#    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# 4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# 5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# 6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1


df %>%
  rowwise() %>%
  summarise(min = min(am, gear, carb),
            max = max(am, gear, carb),
            mean = mean(am, gear, carb))

#    min max mean
# 1    1   4    1
# 2    1   4    1
# 3    1   4    1
# 4    0   3    0
# 5    0   3    0
# 6    0   3    0
# 7    0   4    0
# 8    0   4    0
# 9    0   4    0
# 10   0   4    0
# .. ... ...  ...
1 计算数据帧中每15行的平均值,最小值和最大值

我有一个具有77列和1080行df的数据框,所以我想减少数据,因此,我希望每一列:查找每15行的最小值,最大值和平均值。 例如,对于第一列,我希望每15行找到第二列的min,max,mean相同,依此类推,对所有77列如此,然后将所有这些都放入数据帧中。 我该怎么做? 谢谢 ...

2 R:查找数据框中列的最大/最小值

假设我有一个列名列表作为向量: 我知道这些列名称来自数据框df: 如何在vec中找到每列的最大值,以df查看它们的值。 例如,类似于: 显然这不起作用,但想法是boostedMax采用列名称的向量和列所在的数据框,并返回这些列的最大值。 在这个例子中,它将返回向量: ...

2016-08-03 16:44:51 4 6625   r
3 使用组中的最小值将新列添加到数据框

我有以下棒球比赛参加人数的示例数据框: 我想创建两个新列。 第一个是称为“ opening_day”的简单二进制变量,该变量指示(是1还是0)游戏是否是一年中的第一场比赛。 第二个将被称为“ opening_day_attendance”,其中将包含该第一个游戏的出席人数。 ...

2018-03-13 18:19:00 2 48   r/ dplyr
4 数据框列的平均值

我有一个带有不同年份数据的data.frame ,用于一组观测值。 列的名称为年份,重复的年份由年份标识,后跟".1" (重复的年份为2008和2008.1 )。 的dput()的对的第一观察data.frame如下: 我想计算年份和重复年份的平均值(2008和2008.1)。 ...

7 设置数据子集,找到MAX,MIN,Mean并将其绘制

所以我的数据如下: 因此,根据上一个问题,我将得到一个新表: 因此,基本上,我已经展示了具有可变窗口的滚动应用功能,该窗口在发生切换时会考虑一个窗口,该窗口在输出中。 ...

2017-04-30 10:20:57 1 36   r
8 将 netCDF 数据聚合为平均值、最小值、最大值

我有几个netCDF文件,可以在这里下载,由Coperinucs创建。 有四个文件,每个文件大约1GB。 我像这样阅读文件 这给了我 根据文档计算平均值应该是直接的 这会导致计算机死机并最终崩溃。 尝试对数据进行分chunk也不起作用。 这不会崩溃,但我明白了 我想知道如何计算 ...

9 pandas 数据框中的最大值和最小值

我有一个 Pandas 数据框,它显示了 1990 年的每小时温度读数,如下所示: 我想每 24 小时计算一次最大干球温度并获得相应的日期和时间。 我该怎么办? 到目前为止,我有: 每 24 小时给出最高温度如下: 我想以以下形式获取每个最高温度的相应日期: ...

2020-02-11 15:04:39 2 250   python
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM