gpt4 book ai didi

R:R 中有 "Un-Character"命令吗?

转载 作者:行者123 更新时间:2023-12-05 01:52:02 25 4
gpt4 key购买 nike

我正在使用 R 编程语言。

我有以下数据集:

v <- c(1,2,3,4,5,6,7,8,9,10)

var_1 <- as.factor(sample(v, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))

var_2 <- as.factor(sample(v, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))

var_3 <- as.factor(sample(v, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))

var_4 <- as.factor(sample(v, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))

var_5 <- as.factor(sample(v, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))

my_data = data.frame(var_1, var_2, var_3, var_4, var_5)

我还有另一个“条件”数据集,将用于查询此数据框:

conditions = data.frame(cond_1 = c("1,3,4", "4,5,6"), cond_2 = c("5,6", "7,8,9"))

我的问题:我尝试运行以下命令以根据“条件”的第一行从“my_data”中选择行 - 但返回空结果:

my_data[my_data$var_1 %in% unlist(conditions[1,1]) &
my_data$var_2 %in% unlist(conditions[1,2]), ]

[1] var_1 var_2 var_3 var_4 var_5
<0 rows> (or 0-length row.names)

我试图通过“检查”这些条件来对此进行更多研究:

class(conditions[1,1])
[1] "character"

这让我觉得“unlist()”命令不起作用,因为条件本身是一个“字符”而不是“列表”。

是否有一个等效的命令可以在这里使用,起到与“unlist()”命令相同的作用,以便可以运行上述语句?

一般来说,我试图产生与我从这段代码中得到的结果相同的结果——但保持我在上面使用的格式:

my_data[my_data$var_1 %in% c("1", "3", "4") &
my_data$var_2 %in% c("5", "6"), ]

谢谢!

引用: Selecting Rows of Data Based on Multiple Conditions

最佳答案

在前面,"1,3,4"!= 1。看来您应该使用 strsplit(., ",") 拆分字符串。

expected <- my_data[my_data$var_1 %in% c("1", "3", "4") & my_data$var_2 %in% c("5", "6"), ]
head(expected)
# var_1 var_2 var_3 var_4 var_5
# 18 3 6 2 2 9
# 129 3 5 3 2 8
# 133 4 5 6 5 8
# 186 1 6 6 10 10
# 204 4 6 4 2 6
# 207 1 5 3 2 9

out <- my_data[do.call(`&`,
Map(`%in%`,
lapply(my_data[,1:2], as.character),
lapply(conditions, function(z) strsplit(z, ",")[[1]]))),]
head(out)
# var_1 var_2 var_3 var_4 var_5
# 18 3 6 2 2 9
# 129 3 5 3 2 8
# 133 4 5 6 5 8
# 186 1 6 6 10 10
# 204 4 6 4 2 6
# 207 1 5 3 2 9

编辑:更新新的条件:将do.call更改为Reduce:

conditions = data.frame(cond_1 = c("1,3,4", "4,5,6"), cond_2 = c("5,6", "7,8,9"), cond_3 = c("4,6", "9"))
out <- my_data[Reduce(`&`,
Map(`%in%`,
lapply(my_data[,1:3], as.character),
lapply(conditions, function(z) strsplit(z, ",")[[1]]))),]
head(out)
# var_1 var_2 var_3 var_4 var_5
# 133 4 5 6 5 8
# 186 1 6 6 10 10
# 204 4 6 4 2 6
# 232 1 5 6 5 8
# 332 3 6 6 5 10
# 338 1 5 6 3 6

关于R:R 中有 "Un-Character"命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71813866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com