R检查数据表值是否为同一级别

时间:2015-07-18 01:29:37

标签: r r-factor

假设我有一个数据表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

1 个答案:

答案 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