我正在尝试生成一个虚假的数据集进行测试。
生成所有组合中存在的列很容易:
subject <- 1:5
visit <- c("D0", "D100", "D500")
isotype <- c("IgG", "IgA", "IgM", "IgD)
testdata <- expand.grid(subject, visit, isotype)
names(testdata) <- c("subject", "visit", "isotype")
现在我需要再创建两列; &#34;阳性&#34;在&#34;访问&#34;和&#34;响应&#34;中为每个组提供特定值随机整数,其范围取决于&#34;中的每个组;访问&#34;。
对于&#34;积极性&#34;,我可以这样做:
testdata[testdata$visit == "D0", c("positivity")] <- NA
testdata[testdata$visit == "D100", c("positivity")] <- 1
testdata[testdata$visit == "D500", c("positivity")] <- 0
和#34;响应&#34;,我可以这样做:
testdata[testdata$visit == "D0", c("response")] <- sample(1:100, 1)
testdata[testdata$visit == "D100", c("response")] <- sample(20000:30000, 1)
testdata[testdata$visit == "D500", c("response")] <- sample(1:100, 1)
但实际上我在&#34;访问&#34;中有更多独特的观察。比这还需要永远。我希望我可以使用dplyr和group_by循环遍历每个组并分配&#34; positivity&#34;从向量开始,因为该向量的长度应该等于&#34;中的组的数量&#34;并指定&#34;响应&#34;使用样本方法的范围向量。
positivityvalues <- c(NA, 1, 0)
responseranges <- c(1:100, 1:500, 1:100)
testdata <- testdata %>%
group_by(visit) %>%
mutate(#i can't figure out what to put here
#positivity[1] = positivityvalues[1] etc...
#response[1] = sample(responseranges[1], 1) etc...
)
得到这样的东西(为了清楚起见,只列出前两个科目和同种型)
subject visit isotype positivity response
1 D0 IgG NA 58
1 D100 IgG 1 27093
1 D500 IgG 0 2
1 D0 IgA NA 42
1 D100 IgA 1 28921
1 D500 IgA 0 85
2 D0 IgG NA 86
2 D100 IgG 1 26039
2 D500 IgG 0 54
2 D0 IgA NA 99
2 D100 IgA 1 29021
2 D500 IgA 0 23
由于
编辑*完成更新
Edit2 *解决方案:
ranges <- list(D0=c(1:100), D100=c(25000:32000), D500=c(1:100))
positives <- c(D0=NA, D100=1, D500=0)
testdata$positivity <- positives[testdata$visit]
testdata$responsetemp <- ranges[testdata$visit]
testdata$reponse <- lapply(testdata$responsetemp, function(x) sample(x, 1))
答案 0 :(得分:1)
您可以使用命名向量...
执行此操作testdata <- expand.grid(subject=subject, visit=visit, isotype=isotype)
#this way to get column names
positivityvalues <- c(D0=NA, D100=1, D500=0) #add names
testdata$positivity <- positivityvalues[testdata$visit] #adds value by name
您可以使用sample
列中的response
函数的参数执行类似操作。
答案 1 :(得分:1)
以下是使用tidyverse
的选项。使用&#39;访问&#39;的唯一值创建一个命名向量。 (当访问&#39;使用它来匹配访问元素并将其替换为匹配向量的NA,0,1时,不清楚如何更改值,然后{ {1}}数据通过&#39;访问&#39;,使用split
来自相应map2
的{{1}} <{1}}
sample