【发布时间】:2018-12-20 22:14:32
【问题描述】:
我的数据显示了 5 次测试(pub1 到 pub5)的结果,每个测试都取 0 到 6 之间的整数值,并且在 5 个不同年龄重复(age1 到 age5)。也就是说,pub1 是在 age1 完成的....pub5 是在 age5 完成的
我需要创建 6 个新列/变量(age_v1 到 age_v6),这些列/变量应该显示一个人第一次获得一定分数 pub 的年龄:
- age_v1:在任何
pub变量上首次出现值 1 时的年龄 - age_v2:在任何
pub变量上首次出现值 2 时的年龄 - age_v3:在任何
pub变量上首次出现值 3 时的年龄 - age_v4:在任何
pub变量上首次出现值 4 时的年龄 - age_v5:在任何
pub变量上首次出现值 5 时的年龄 - age_v6:在任何
pub变量上首次出现值 6 时的年龄
例如,对于单个 x,age_v5 将等于 age3,如果他们第一次在任何 pub 变量上得分为 5 位于 pub3 中
#Simulate example data
library(tidyverse)
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:4),pub2 = rnorm(N,1:4),
pub3 = rnorm(N,1:4),pub4 = rnorm(N,1:4),pub5 = rnorm(N,1:4))
data <- data %>% mutate_at(vars(starts_with("pub")), funs(round(replace(., .< 0, NA), 0)))
【问题讨论】:
-
从描述中不清楚你想要什么作为输出?最初,我以为您想一步创建列,但是在查看您的描述时,它有点不同。你能显示预期的输出吗
-
谢谢 - 我稍微编辑了我的问题,希望能让我的观点更清楚。我希望一步创建列,新列应采用不同的 age1:age5 值,具体取决于 pub1:pub5 中特定值的第一次出现
-
我认为最好有一个小例子并显示相应的预期输出。您显示的输入数据可以使用
data %>% mutate_at(vars(starts_with("pub")), funs(round(replace(., .< 0, NA), 0)))创建 -
在要创建的列中,是二进制列/列还是与之对应的年龄值,??令人困惑
-
新列应该是年龄值 - 它们应该采用年龄值
标签: r functional-programming dplyr data-manipulation