gpt4 book ai didi

r - 在数据框的行中,找到第一次出现和最长的值序列

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

考虑这个数据框,它提供了针对 10 个人的 15 项测试的评分响应:

library(tidyverse)
input <- tribble(
~ID, ~i1, ~i2, ~i3, ~i4, ~i5, ~i6, ~i7, ~i8, ~i9, ~i10, ~i11, ~i12, ~i13, ~i14, ~i15,
"A", 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
"B", 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
"C", 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
"D", 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0,
"E", 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
"F", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
"G", 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
"H", 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,
"I", 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
"J", 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1
)

我希望 R 逐行进行,并从左到右扫描每行中的单元格,以创建这些新列:

first_0_name:返回包含值 0

第一次出现的单元格的列 name

first_0_loc:返回包含值 0

第一次出现的单元格的列 位置

streak_1:从第一次出现的0开始,找到下一次出现的1,然后统计连续出现了多少次 1 在下一次出现 0 之前。

新列应如下所示

new_cols <- tribble(
~first_0_name, ~first_0_loc, ~streak_1,
"i9", 10, 5,
"i4", 5, 4,
"i6", 7, 8,
"i8", 9, 4,
"i9", 10, 5,
NA, NA, NA,
"i1", 2, 5,
"i3", 4, 8,
"i2", 3, NA,
"i1", 2, 1
)

在此先感谢您的帮助!

最佳答案

如果您想更直接地使用 base R 并避免转换整个数据帧的成本。该解决方案还保留了行的顺序,而无需创建额外的排序列(与 tidyverse 解决方案不同)。

results <- apply(input, 1, function(x) {

# get indices of all zeros
zeros <- which(x == 0)

# exit early if no zeros are found
if (length(zeros) == 0) {
return(data.frame(first_0_name = NA, first_0_loc = NA, streak_1 = NA))
}

first.name <- names(zeros[1]) # name of first 0 column
first.idx <- zeros[1] # location of first zero
longest.streak <- diff(zeros)[1] - 1 # length of first 0-0 streak

return(data.frame(first_0_name = first.name,
first_0_loc = first.idx,
streak_1 = ifelse(longest.streak == 0, NA, longest.streak))
)

})

output <- do.call(rbind, results)

first_0_name first_0_loc streak_1
i9 i9 10 5
i4 i4 5 4
i6 i6 7 8
i8 i8 9 NA
i91 i9 10 5
1 <NA> NA NA
i1 i1 2 5
i3 i3 4 8
i2 i2 3 NA
i31 i3 4 2

关于r - 在数据框的行中,找到第一次出现和最长的值序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045180/

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