我有一个数据帧,几列随机数据,我不想使用,还有10列(列8:17),其中包含几部电影中各种不同的演员名字,每一行都是一部电影,在列8:17中,该电影中的10个顶级演员被命名。我想检查某个演员的名字"Samuel L. Jackson“是否出现在每部电影的这些列中(8:17)。
我在数据框的末尾创建了一个空列。如果名称出现在第8:17列中,我希望分配1。如果不是,我希望它是0。
这似乎是一个相当简单的问题,然而我尝试了很多不同的方法,似乎都不起作用……
该怎么办呢?
我尝试过使用ifelse函数遍历每一行(电影),也尝试过使用独立if else语句执行相同的循环。
for (i in nrow(All_dataset)) {
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 8], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 9], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 10], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 11], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 12], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 13], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 14], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 15], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 16], 1, 0)
All_dataset[i, 18] <- ifelse("Samuel L. Jackson" %in% All_dataset[i, 17], 1, 0)
}
for (i in nrow(All_dataset)) {
if (is.element("Samuel L. Jackson", All_dataset[i, 8]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 9]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 10]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 11]) == TRUE) {
All_dataset[i, 18] == 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 12]) == TRUE) {
All_dataset[i, 18] == 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 13]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 14]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 15]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 16]) == TRUE) {
All_dataset[i, 18] <- 1
}
else if (is.element("Samuel L. Jackson", All_dataset[i, 17]) == TRUE) {
All_dataset[i, 18] <- 1
}
else {
All_dataset[i, 18] <- 0
}
}
有时TRUE被分配给所有人,有时FALSE被分配,但从来没有正确地完成(对于电影Samuel出现1,如果他没有出现则为0)
发布于 2019-06-02 16:06:14
我们将'All_dataset‘中的8:17列设置为子集,检查它是否等于(==
)到"Samuel L. Jackson“以返回逻辑矩阵,获取rowSums
,检查它是否大于0以返回逻辑向量,使用as.integer
将其强制为二进制(真-> 1,假-> 0),并将其赋值(<-
)到第18列
All_dataset[, 18] <- as.integer(rowSums(All_dataset[, 8:17] ==
"Samuel L. Jackson") > 0)
另一种选择是使用|
的Reduce
。循环遍历数据子集(lapply
),通过检查字符串是否存在于列中来返回逻辑vector
s的list
,使用|
将该list
转换为逻辑向量(即检查是否有任何相应的元素为真),并像以前一样将其转换为二进制
All_dataset[, 18] <- as.integer(Reduce(`|`, lapply(All_dataset[, 8:17],
`==`, "Samuel L. Jackson")))
https://stackoverflow.com/questions/56416684
复制相似问题