gpt4 book ai didi

r - 从组创建索引以从原始 data.frame 中选择值以用于结果

转载 作者:行者123 更新时间:2023-12-04 11:32:02 25 4
gpt4 key购买 nike

我有一个数据框 df .我想使用 summarize 的输出创建一个新变量作为从原始 data.frame 中的列中检索值的索引。
df.l有以下列 trial , location , posi , date , 和 value .

我想使用每个组( valuetriallocation )的“date ==1”的总和作为从 posi 中选择值的索引并将其存储为新变量。
valuedf.l可以是 1 或 0(一旦它变为零,它就保持不变,只要它的顺序正确,即 posi 0 - 1)。此分组总和指示值在组内从 1 变为 0 的位置。

要确定索引位置,请使用以下代码:

test <- df.l %>% 
group_by(trial, location, date) %>%
summarise(n= sum(value==1))

但当然, posi不见了。

我希望像下面的代码这样的东西可以工作,但它没有。它以正确的结果开始,但在某处索引出错了。我不知道像我一样调用专栏是否有意义。
test <- df.l %>% 
group_by(trial, location, date) %>%
summarise(n= sum(value==1)) %>%
mutate(ANS = nth(df.l$posi,n))

使用 dplyr我可以从组中创建一个“索引”以从原始 data.frame 中选择一个值,然后将此变量添加到新的 data.frame 中吗?或者,是否有另一种方法使用 dplyr 来达到相同的结果?
# truncated data.frame
df.l <- structure(list(trial = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
location = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L,
3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), posi = c(0,
0.28, 0.65, 1, 0, 0.33, 0.67, 1, 0, 0.2, 0.5, 1, 0, 0.28,
0.65, 1, 0, 0.33, 0.67, 1, 0, 0.2, 0.5, 1), date = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), value = c(1L, 1L, 1L, 0L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
1L, 1L, 1L, 0L, 0L)), .Names = c("trial", "location", "posi", "date", "value"), row.names = c(NA, 24L), class = "data.frame")

#desired result
result <- structure(list(trial = c(1L, 1L, 1L, 2L, 2L, 2L), location = c(1L,
2L, 3L, 1L, 2L, 3L), date = c(1L, 1L, 1L, 1L, 1L, 1L), n = c(3L,
4L, 4L, 1L, 4L, 2L), posi = c(0.65, 1, 1, 0, 1, 0.2)), class = "data.frame", .Names = c("trial",
"location", "date", "n", "posi"), row.names = c(NA, -6L))

最佳答案

您可以在 summarise 内完成:

df.l %>% 
group_by(trial, location, date) %>%
summarise(n= sum(value==1), ANS = nth(posi,n))
#Source: local data frame [6 x 5]
#Groups: trial, location
#
# trial location date n ANS
#1 1 1 1 3 0.65
#2 1 2 1 4 1.00
#3 1 3 1 4 1.00
#4 2 1 1 1 0.00
#5 2 2 1 4 1.00
#6 2 3 1 2 0.20

或者,如果您实际上并不需要 n结果,你可以做
df.l %>% 
group_by(trial, location, date) %>%
summarise(ANS = nth(posi, sum(value == 1)))

或者
df.l %>% 
group_by(trial, location, date) %>%
summarise(ANS = posi[sum(value == 1)])

关于r - 从组创建索引以从原始 data.frame 中选择值以用于结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31732869/

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