微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 按 id 跨列和行的标准偏差

如何解决R 按 id 跨列和行的标准偏差

我有几个类似于以下数据框的数据框(有更多的列):

id col1 col2 col3 col4 col5
1   4    3    5    4    A
1   3    5    4    9    Z
1   5    8    3    4    H
2   6    9    2    1    B
2   4    9    5    4    K
3   2    1    7    5    J
3   5    8    4    3    B
3   6    4    3    9    C

我想计算按 id 分组的特定列(比如 col2 到 col4)的标准偏差。我不知道每个数据框中的列索引。我只知道要计算其标准差的列的名称

有什么方法可以轻松做到这一点吗?我的原始数据框包含大约 20 列,我只想要 10 列的标准偏差,这些列具有按 id 分组的特定列名。

最重要的是,如果我可以根据 id 将计算出的标准偏差作为新列直接添加到我的数据框中就好了,如下所示:

id col1 col2 col3 col4 col5 SD
1   4    3    5    4    A   SD1
1   3    5    4    9    Z   SD1
1   5    8    3    4    H   SD1
2   6    9    2    1    B   SD2
2   4    9    5    4    K   SD2
3   2    1    7    5    J   SD3
3   5    8    4    3    B   SD3
3   6    4    3    9    C   SD3

解决方法

你可以试试:

library(dplyr)
df %>%
  group_by(id) %>%
  mutate(SD = sd(unlist(select(cur_data(),col2:col4))))

#    id  col1  col2  col3  col4 col5     SD
#  <int> <int> <int> <int> <int> <chr> <dbl>
#1     1     4     3     5     4 A      2.12
#2     1     3     5     4     9 Z      2.12
#3     1     5     8     3     4 H      2.12
#4     2     6     9     2     1 B      3.41
#5     2     4     9     5     4 K      3.41
#6     3     2     1     7     5 J      2.62
#7     3     5     8     4     3 B      2.62
#8     3     6     4     3     9 C      2.62
,

使用 data.table

library(data.table)
setDT(df)[,SD :=   sd(unlist(.SD)),id,.SDcols = col2:col4]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。