R 检查数据 table 值是否相同

R Checking if data table values are same level

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

将值与项目匹配的一个有用策略是使用 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