gpt4 book ai didi

保留组中的第一个值

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

我希望按组保留变量的第一个值。下面的代码执行此操作,但使用了 for 循环,并且看起来过于复杂。有没有更有效的方法,特别是在基础 R 中?对象 desired.result 包含我想要的结果。

my.data <- read.table(text = '

my.string my.cov my.id
11....... 1 1
1.1...... 3 2
..1.2.... 4 2
....2.2.. 5 2
12....... 2 3
.22...... 3 3
..24..... 3 3
1...2.... 1 4
....2...4 0 4
..2..4... 5 5
', header = TRUE, stringsAsFactors = FALSE, na.strings = 'NA')

desired.result <- read.table(text = '

my.string my.cov my.id
11....... 1 1
1.1...... 3 2
..1.2.... 3 2
....2.2.. 3 2
12....... 2 3
.22...... 2 3
..24..... 2 3
1...2.... 1 4
....2...4 1 4
..2..4... 5 5
', header = TRUE, stringsAsFactors = FALSE, na.strings = 'NA')

my.seq <- rle(my.data$my.id)$lengths
my.data$first <- unlist(lapply(my.seq, function(x) seq(1,x)))
my.data$last <- unlist(lapply(my.seq, function(x) seq(x,1,-1)))

my.data$my.new.cov <- rep(NA, nrow(my.data))

for(i in 1:nrow(my.data)) {
if(my.data$first[i] == 1) my.data$my.new.cov[i] = my.data$my.cov[i]
if(my.data$first[i] > 1) my.data$my.new.cov[i] = my.data$my.new.cov[(i - 1)]
}

my.data$my.cov <- my.data$my.new.cov

my.data <- my.data[, c('my.string', 'my.cov', 'my.id')]

all.equal(my.data, desired.result)

# [1] TRUE

最佳答案

这似乎可以做到:

my.data$my.cov <- ave(my.data$my.cov, my.data$my.id, FUN = function(x) head(x,1))

关于保留组中的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669736/

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