【问题标题】:How to add and rename a row in a dataframe using the apply function如何使用 apply 函数在数据框中添加和重命名行
【发布时间】:2023-04-10 08:36:01
【问题描述】:

我是 R 编程新手,从我之前创建的数据框中,我必须添加一个包含所有列的平均值的行,该行必须称为“平均”。需要注意的是,最后一列包含 NA 值。

到目前为止,我已经成功地为每一列和最后一列创建了具有平均值的新行,省略了 NA 值。我需要的是命名该行并将其设为“Average”,默认情况下它显示为 51,我不知道如何更改它,我已阅读有关函数 row.names () 等的信息,但我无法获得什么都出来了。

有人可以帮帮我吗?我将不胜感激

我把数据框留在这里(state.df):

state.df = as.data.frame(state.x77)

这就是我所做的:

apply = apply(state.df, MARGIN = 2, mean, na.rm = TRUE)
rbind(state.df,apply)

我也尝试过这个以及其他一些方法,但它对我不起作用。

rbind(state.df,apply, rownames(state.df, prefix = 'Average'))

总之,通过apply,我基本上已经有了我想要的东西,我只想更改执行rbind时出现的名称51并将其更改为'Average'

【问题讨论】:

  • 完成state.df = rbind(state.df,apply)后,您可以使用rownames(state.df)[nrow(state.df)] = "Average"更改最后一个行名
  • 不适用rbind( state.df, Average=colMeans(state.df) )
  • 我不能做 'rbind( state.df, Average=colMeans(state.df) )' 因为我在 area 列上有 NA valors,我不能应用 na.rm = TRUE

标签: r dataframe rows


【解决方案1】:

rbind 仅针对类似于矩阵的参数从参数名称构造行名称。 applycolMeans 都返回一个类似于矩阵的向量。您可以使用t 将此向量强制转换为矩阵,以便实际使用参数名称(在本例中为Average)。

dd <- data.frame(x = rnorm(10L), y = c(NA, rnorm(9L)))

rbind(dd, Average = t(colMeans(dd, na.rm = TRUE)))
#                  x          y
# 1        0.4070128         NA
# 2        1.2352564  0.5730119
# 3       -0.5842432 -0.2096068
# 4        0.1695935 -1.0667109
# 5       -0.7393369 -1.5895364
# 6       -0.7394052 -1.0886582
# 7        0.9922455 -0.2560118
# 8       -3.0080877 -2.1085712
# 9       -0.3629210 -1.9192967
# 10      -0.5564323 -0.5459473
# Average -0.3186318 -0.9123697

rbind(dd, Average = colMeans(dd, na.rm = TRUE))
#             x          y
# 1   0.4070128         NA
# 2   1.2352564  0.5730119
# 3  -0.5842432 -0.2096068
# 4   0.1695935 -1.0667109
# 5  -0.7393369 -1.5895364
# 6  -0.7394052 -1.0886582
# 7   0.9922455 -0.2560118
# 8  -3.0080877 -2.1085712
# 9  -0.3629210 -1.9192967
# 10 -0.5564323 -0.5459473
# 11 -0.3186318 -0.9123697

当然,正如 cmets 中所指出的,您始终可以在事后使用 row.names&lt;- 修改行名。

您可以将colMeans(dd, na.rm = TRUE) 替换为apply(dd, 2L, mean, na.rm = TRUE) 并获得相同的结果,但colMeans 更快。对于均值以外的操作,您可能需要apply

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2012-03-26
    • 2021-12-28
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2021-11-03
    相关资源
    最近更新 更多