gpt4 book ai didi

r - 如何根据其他列的排列在数据框中创建新列?

转载 作者:行者123 更新时间:2023-12-04 22:42:35 24 4
gpt4 key购买 nike

假设我有一个如下所示的数据框:

    var1   var2   var3   var4  
a TRUE FALSE TRUE FALSE
b TRUE TRUE TRUE FALSE
c FALSE TRUE FALSE TRUE
d TRUE FALSE FALSE FALSE
e TRUE FALSE TRUE FALSE
f FALSE TRUE FALSE TRUE

我想创建一个分配 a 的新列至 f根据 TRUE 的排列来分类和 FALSE每个都有顶部的变量。

在这个简化的示例中,结果如下所示:
    var1   var2   var3   var4    category
a TRUE FALSE TRUE FALSE A
b TRUE TRUE TRUE FALSE B
c FALSE TRUE FALSE TRUE C
d TRUE FALSE FALSE FALSE D
e TRUE FALSE TRUE FALSE A
f FALSE TRUE FALSE TRUE C

请注意, TRUE 的每个唯一排列和 FALSE成为一个不同的类别,并且因为 ae具有相同的排列,它们最终属于同一类别( A )。

有没有一种简单的方法可以做到这一点,如果顶部有大量变量,并且可能不限于 TRUEFALSE但如果数据框充满了类别/数字?

最佳答案

你可以做类似的事情

## paste the rows together, creating a character vector
x <- do.call(paste, df)
## match it against itself and apply to 'LETTERS', and assign as new column
df$category <- LETTERS[match(x, x)]
df
# var1 var2 var3 var4 category
# a TRUE FALSE TRUE FALSE A
# b TRUE TRUE TRUE FALSE B
# c FALSE TRUE FALSE TRUE C
# d TRUE FALSE FALSE FALSE D
# e TRUE FALSE TRUE FALSE A
# f FALSE TRUE FALSE TRUE C

如果我们使用命名列表作为环境,上面的代码可以写成一行代码。这避免了对全局环境进行任何新分配。
df$category <- LETTERS[with(list(x = do.call(paste, df)), match(x, x))]

数据:
df <- structure(list(var1 = c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE), 
var2 = c(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), var3 = c(TRUE,
TRUE, FALSE, FALSE, TRUE, FALSE), var4 = c(FALSE, FALSE,
TRUE, FALSE, FALSE, TRUE)), .Names = c("var1", "var2", "var3",
"var4"), row.names = c("a", "b", "c", "d", "e", "f"), class = "data.frame")

关于r - 如何根据其他列的排列在数据框中创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622867/

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