假设我有一个数据表g,如下所示:
g <- read.table(file = textConnection('ID Answers Questions
AA 1111111 222222222
AA 2222222 333333333
BB 3333333 444444444
BB 4444444 555555555
BB 5555555 666666666
CC 6666666 777777777'), header = TRUE)
nlevels(g$ID)
# 3
对于每个不同的ID,我想创建一个随机的hexcolor并将其分配给一个变量,在这种情况下有三个,由for循环给出:
for(j in 1:nlevels(g$ID)) {
rcolor <- paste(sample(0:255,size=3,replace=TRUE),collapse=" ")
assign(paste0("IDcolor", j), rcolor)
}
IDcolor1
# [1] "50 25 197" # <--corresponds to AA
IDcolor2
# [1] "131 255 58" # <--corresponds to BB
IDcolor3
# [1] "242 100 72" # <--corresponds to CC
因此,三个级别AA,BB和CC中的每一个都有三个变量。
我想输出具有正确十六进制颜色的每一行,但是我不知道如何检查g [,1]中的哪个值对应于哪个IDcolor变量。这就是我现在尝试将每一行粘贴到变量m中。
m <- ""
for(i in 1:nrow(g)){
m[i] <- paste0(g[i,1],":",IDcolor1)
}
我想要的输出是:
m
# [1] AA:50 25 197
# [2] AA:50 25 197
# [3] BB:131 255 58
# [4] BB:131 255 58
# [5] BB:131 255 58
# [6] CC:242 100 72
答案 0 :(得分:1)
将值与项匹配的有用策略是使用merge()
,匹配创建匹配值的数据框。然后,根据您的喜好使用粘贴组合成另一个变量是一件非常简单的事情。
g <- read.table(file = textConnection('ID Answers Questions
AA 1111111 222222222
AA 2222222 333333333
BB 3333333 444444444
BB 4444444 555555555
BB 5555555 666666666
CC 6666666 777777777'), header = TRUE)
for_merging <- data.frame(
ID=c("AA","BB","CC"),
response = c("50 25 197","131 255 58","242 100 72"))
> merge(g, for_merging)
ID Answers Questions response
1 AA 1111111 222222222 50 25 197
2 AA 2222222 333333333 50 25 197
3 BB 3333333 444444444 131 255 58
4 BB 4444444 555555555 131 255 58
5 BB 5555555 666666666 131 255 58
6 CC 6666666 777777777 242 100 72