【问题标题】:change the colname of the R dataframe on matching multiple condition在匹配多个条件时更改 R 数据框的 colname
【发布时间】:2020-08-14 02:15:19
【问题描述】:

谁能帮我解答这个问题。实际上我有一个包含 n 行和 m 列的数据框,数据框的第一列有 2 个字符串字符(john,Michaeal),其余列的值为 0 或 1。我试图根据条件命名所有列,如果是拳头column as if name == john 并且 Multiple 列之一中的值为 1,而不是 colname as "John" else "others"

我试过这个方法

names(df) = ifelse(df$name=="John" & rowSums(df[, 2:5800]==1), "John", "Others")

df 输入

name    col1   col2 col3 col4 col5
john    0     1    0     0    0
Micheal 1   0.   0.  0.  0 
john.   0  0.   1.  0  0 

想要的输出

name   others John. john. others. others
john    0     1    0     0    0
Micheal 1   0.   0.  0.  0 
john.   0  0.   1.  0  0 

谢谢

【问题讨论】:

  • 我已经在原帖中制作了示例数据集,对不起我是新来的,我不知道在这里清晰地创建df
  • 我收到此错误。 “名称错误(x)
  • 数据集通常共享为dput,以便于复制。这篇文章可以帮助创建一个可重复的示例stackoverflow.com/questions/5963269
  • 如果下面的答案有帮助,请考虑通过单击答案左侧的复选标记来接受答案。这将帮助其他人知道您已经找到了答案。阅读stackoverflow.com/help/someone-answers

标签: r


【解决方案1】:

您可以仅对 name'john' 的行进行子集化,并对这些列求和。找出哪一列至少有一个 1 并将它们重命名为 'John' 并将其余列重命名为 'Others'

inds <- which(colSums(df[df$name == 'john', -1]) > 0) + 1
names(df)[inds] <- 'John'
names(df)[setdiff(2:ncol(df), inds)] <- 'Others'
df
#     name Others John John Others Others
#1    john      0    1    0      0      0
#2 Micheal      1    0    0      0      0
#3    john      0    0    1      0      0

但是,请注意,不建议在数据框中使用相同的列名。您可以使用make.unique 使它们独一无二

names(df) <- make.unique(names(df))

数据

df <- structure(list(name = c("john", "Micheal", "john"), col1 = c(0L, 
1L, 0L), col2 = c(1, 0, 0), col3 = c(0, 0, 1), col4 = c(0, 0, 
0), col5 = c(0L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
-3L))

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多