gpt4 book ai didi

r - 减去具有数字数据的列的行方法

转载 作者:行者123 更新时间:2023-12-04 12:35:19 26 4
gpt4 key购买 nike

我有一个包含大量数据的 csv 文件,例如

> data <- read.csv("data2006.csv", header = TRUE, sep = ";")
> data
cntry aa ab ac ad
1 AT 3 4 3 2
2 AT 1 2 3 2
3 AT 2 3 3 4

我想贬低这些数据,即从后续原始数据的所有元素中减去每一行的平均值。我需要对包含在具有数值的列中的元素执行此操作,即“aa”、“ab”、“ac”和“ad”列,同时保留“cntry”列中的元素。因此,期望的结果如下所示:

      cntry      aa      ab      ac      ad 
1 AT 0 1 0 -1
2 AT -1 0 1 0
3 AT -1 0 0 1

在关于均值居中 ( http://www.gastonsanchez.com/visually-enforced/how-to/2014/01/15/Center-data-in-R/ ) 的文章中,我发现可以为此使用 rowMeans:

center_rowmeans <- function(x) {
xcenter = rowMeans(x)
x - rep(xcenter, rep.int(nrow(x), ncol(x)))
}

但我无法调整此代码以用于处理我的数据。有人可以帮忙吗?

最佳答案

您真正缺少的是如何使用该标识来标识列和索引的类:

anatasia <- read.table(text="      cntry      aa      ab      ac      ad 
1 AT 3 4 3 2
2 AT 1 2 3 2
3 AT 2 3 3 4 ")


rmeans <- rowMeans(anatasia[,sapply(anatasia, class) %in% c("numeric", "integer")])

dat <- cbind(anatasia[,!sapply(anatasia, class) %in% c("numeric", "integer")],
anatasia[, sapply(anatasia, class) %in% c("numeric", "integer")]-rmeans)

colnames(dat) <- colnames(anatasia)
dat
  cntry aa ab ac ad
1 AT 0 1 0 -1
2 AT -1 0 1 0
3 AT -1 0 0 1

关于r - 减去具有数字数据的列的行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49593442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com