R初学者,所以提前感谢您的耐心等待!
我正在尝试执行某项操作而我并不认为我在R中使用了正确的方法。
总结一下下面写的内容 - 我希望R识别2个字符向量的组合作为预定义向量的名称。
我的数据集是:
Color <- c("Red", "Red", "Blue", "Yellow", "Green")
Shade <- c("Burgundy", "Charcoal", "Azur", "Mustard", "Navy")
dataset <- data.frame(Color, Shade)
我为&#34; Redshades&#34;,&#34; Blueshades&#34;预设了矢量图。等,以考虑所有颜色的颜色。例如:
Redshades <- c("Burgundy", "Crimson", "Scarlet")
现在,我想通过数据集的每一行,并确定阴影是否与同一行的颜色相对应。
我的方法是在第1列中使用颜色的名称,添加&#34;阴影&#34;对应于包含阴影名称的相关向量的名称,然后计算它是否正确
col <- c(dataset$Color[1],"Shades", sep="")
问题在于&#34; col&#34;返回一个字符,而不是矢量名称(已存在)。使用as.name()或noquote()并没有帮助。
我接受我可能会偏离目标,对任何建议持开放态度.....我已经花了一段时间在stackoverflow和google上搜索但无济于事.......
答案 0 :(得分:2)
这是一个基础R方法,您可以将阴影向量存储在列表中(我称之为shadeslst)。
Redshades <- c("Burgundy", "Crimson", "Scarlet")
Blueshades <- c("Azur", "Navy")
# add more shades ...
# store them in a list
shadeslst <- list(Red = Redshades, Blue = Blueshades)
shadeslst
#$Red
#[1] "Burgundy" "Crimson" "Scarlet"
#
#$Blue
#[1] "Azur" "Navy"
现在使用sapply
检查它们是否在等效的列表元素中:
dataset$check <- sapply(seq_len(nrow(dataset)), function(idx) with(dataset, Shade[idx] %in% shadeslst[[as.character(Color[idx])]]))
请注意,列表名称必须与dataset$Color
中的颜色名称相对应才能生效。
dataset
# Color Shade check
#1 Red Burgundy TRUE
#2 Red Charcoal FALSE
#3 Blue Azur TRUE
#4 Yellow Mustard FALSE
#5 Green Navy FALSE
答案 1 :(得分:1)
如果您按照@beginneR的建议在列表shadeslst
中存储不同的阴影,您也可以这样做:
library(qdap)
library(reshape2)
dataset$check <- paste2(dataset) %in% paste2(melt(shadeslst)[,2:1])
#instead of paste2 from qdap, you could use as.character(interaction(dataset))
dataset
# Color Shade check
#1 Red Burgundy TRUE
#2 Red Charcoal FALSE
#3 Blue Azur TRUE
#4 Yellow Mustard FALSE
#5 Green Navy FALSE
答案 2 :(得分:0)
如果我正确理解了您的问题,请验证所有红色阴影的行是否正确标记为红色。所有的蓝色阴影都是蓝色等。第一步是确定哪些行属于某个阴影。使用Redshades示例,这可以通过以下方式完成;
is.red.shade <- dataset$Shade %in% Redshades
这将返回一个逻辑向量,随后可用于索引数据集的第一列。
dataset$Color[is.red.shade]
在这种情况下,您只返回了一个值,因此您可以立即看到它是正确的。如果这返回的矢量太长而无法直观检查,则可以通过
检查所有值是否为红色all(dataset$Color[is.red.shade] == "Red")
希望这会解决您的问题,如果不是这样,请告诉我。