gpt4 book ai didi

r - 统计每行第一个0的位置

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

我有一个看起来像这样的数据集:

set.seed(999)
col1 = sample.int(10, 10)
col2 = sample.int(10, 10)
col3 = sample.int(10, 10)
col4 = sample.int(10, 10)
col5 = sample.int(10, 10)

col_data = data.frame(col1, col2, col3, col4, col5)

col1 col2 col3 col4 col5
1 4 8 3 9 8
2 7 5 9 7 10
3 1 7 7 8 2
4 6 6 5 5 4
5 8 10 8 3 7
6 2 3 1 2 6
7 5 9 2 1 1
8 10 2 4 4 3
9 9 1 10 6 9
10 3 4 6 10 5

我想在此数据集中创建新列:

  • 找出每行中第一个“9”的位置(即列号)
  • 找出每行中第一个“7”的位置(即列号)
  • 找出每行第一个“1”的位置(即列号)
  • 找出每行中第一个“10”的位置(即列号)
  • 找出每行中第一个“4”的位置(即列号)

我认为如果数据是矩阵,然后将其转换回数据框,这样做可能会更容易:

col_d = as.matrix(col_data)


first_4 = apply(col_d == 9, 1, which.max)
first_7 = apply(col_d == 7, 1, which.max)
first_1 = apply(col_d == 1, 1, which.max)
first_10 = apply(col_d == 10, 1, which.max)
first_4 = apply(col_d == 4, 1, which.max)

final = cbind(col_data, first_4, first_7, first_1, first_10, first_4)

但这似乎不起作用:

   col1 col2 col3 col4 col5 first_4 first_7 first_1 first_10 first_4
1 4 8 3 9 8 1 1 1 1 1
2 7 5 9 7 10 1 1 1 5 1
3 1 7 7 8 2 1 2 1 1 1
4 6 6 5 5 4 5 1 1 1 5
5 8 10 8 3 7 1 5 1 2 1
6 2 3 1 2 6 1 1 3 1 1
7 5 9 2 1 1 1 1 4 1 1
8 10 2 4 4 3 3 1 1 1 3
9 9 1 10 6 9 1 1 2 3 1
10 3 4 6 10 5 2 1 1 4 2

例如:第一行没有10——但是“first_10”的值为1

  • 有没有办法解决这个错误?

谢谢!

最佳答案

怎么样

apply(col_data == 7, 1, function(x) {ifelse(sum(x)==0, NA, which.max(x))})
[1] NA 1 2 NA 5 NA NA NA NA NA

apply(col_data == 10, 1, function(x) {ifelse(sum(x)==0, NA, which.max(x))})
[1] NA 5 NA NA 2 NA NA 1 3 4

你可以随意更改 NA,这意味着没有那个数字(即 7 或 10)

获得第二个

apply(col_data == 7, 1, function(x) {ifelse(sum(x)==0, NA, which(x)[2])})

得到最后一个

apply(col_data == 7, 1, function(x) {ifelse(sum(x)==0, NA, dplyr::last(which(x)))})

关于r - 统计每行第一个0的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72612577/

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