gpt4 book ai didi

r - 将一列的所有值汇总到一个向量中

转载 作者:行者123 更新时间:2023-12-04 23:14:00 24 4
gpt4 key购买 nike

所以这是我仍在努力解决的问题。

想象一下这样的小玩意:

library(tidyverse)
t1 <- tibble(
id = c(1,1,1,1,2,2,2,2,2),
id_sub = c(1,1,2,2,1,2,2,2,2),
position = c(1,2,1,2,1,1,2,3,4),
head = c(1,1,2,2,1,3,2,2,3)
)

我想要实现的是创建第 5 个属性 depend具有来自 head 的值每个 id_sub .这确实意味着 depend 的每个值是一个最小长度为 1 的向量(应该不是 tibble 的问题,对吧?)。

我在这个例子中寻找的结果将有一个具有以下向量的属性:
c(1,1),c(2,2),c(1),c(3,2,2,3)

当然,我的数据有点大,到目前为止我能找到的唯一解决方案是将小标题分组并传播 positionhead :
t1 %>% 
group_by(id, id_sub) %>%
spread(position, head)

这当然会创建多个属性:
# A tibble: 4 x 6
# Groups: id, id_sub [4]
id id_sub `1` `2` `3` `4`
* <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 1 NA NA
2 1 2 2 2 NA NA
3 2 1 1 NA NA NA
4 2 2 3 2 2 3

对于一个样本,我可以转换 position x head作为矩阵并将其转换为向量忽略 NA .但这在更大范围内对我没有帮助。
m <- t1 %>% 
filter(id == 2 & id_sub == 2) %>%
select(-c(id,id_sub)) %>%
spread(position, head) %>%
as.matrix()
m <- as.vector(m)
m[!is.na(m)]

结果如下:
[1] 3 2 2 3

很高兴听到您的想法和建议!

最佳答案

另一种可能的解决方案:

t1 %>% 
group_by(data.table::rleid(id_sub)) %>%
summarise(hd = list(head)) %>%
pull(hd)

这使:

[[1]]
[1] 1 1

[[2]]
[1] 2 2

[[3]]
[1] 1

[[4]]
[1] 3 2 2 3

关于r - 将一列的所有值汇总到一个向量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47904110/

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