【发布时间】:2018-12-21 22:15:27
【问题描述】:
我有 5 次重复测量,称为 pub1:pub5,每一次取值 1 到 4。每一次测量的年龄都不同 age1:age5。也就是说,pub1 在age1....pub5 在age5 等处测量。
我想创建一个新变量age_pb2,它显示在pub 中首次出现值 2 的年龄。例如,对于单个 x,如果第一次得分 2 位于 pub3 中,age_pb2 将等于 age3
我曾尝试修改以前的代码,但运气不佳。
library(tidyverse)
#Example data
N <- 2000
data <- data.frame(id = 1:2000,age1 = rnorm(N,6:8),age2 = rnorm(N,7:9),age3 = rnorm(N,8:10),
age4 = rnorm(N,9:11),age5 = rnorm(N,10:12),pub1 = rnorm(N,1:2),pub2 = rnorm(N,1:2),
pub3 = rnorm(N,1:2),pub4 = rnorm(N,1:2),pub5 = rnorm(N,1:2))
data <- data %>% mutate_at(vars(starts_with("pub")), funs(round(replace(., .< 0, NA), 0)))
#New variable showing first age at getting a score of 2 (doesn't work)
i1 <- grepl('^pub', names(data)) # index for pub columns
i2 <- grepl('^age', names(data)) # index for age columns
data[paste0("age_pb2")] <- lapply(2, function(i) {
j1 <- max.col(data[i1] == i, 'first')
j2 <- rowSums(data[i1] == i) == 0
data[i2][cbind(seq_len(nrow(data)), j1 *(NA^j2))]
})
【问题讨论】:
-
请发帖
dput(data) -
谢谢,我添加了示例数据,只是想确定在任何 pub 变量中首次观察到值 2 的年龄
-
您想要的输出是数字 1:5 的向量,对应于 pub(数据长度)或那些年龄值?
-
我的输出应该对应年龄值。
标签: r function dplyr data-manipulation