当前位置: 首页 > 知识库问答 >
问题:

将列名赋给值

贺光华
2023-03-14

我和dplyr一起工作,我有一个类似的小消息:

df<- data_frame(one= c(1, NA, 1),
       two= c(NA,NA,1),
       three= c(1, 1,1)
       )
----------------------------
# A tibble: 3 x 3
      one   two  three
     <dbl> <dbl> <dbl>
 1     1    NA     1
 2    NA    NA     1
 3     1     1     1
----------------------------
----------------------------
# A tibble: 3 x 3
      one    two    three
     <dbl>  <dbl>   <dbl>
 1    one    NA     three
 2    NA     NA     three
 3    one    two    three
----------------------------

所以我可以对每个列使用ifelse函数和mutate:

df %>%
      one= ifelse(!is.na(one),'one', NA ),
      two= ifelse(!is.na(two),'two', NA ),
      three= ifelse(!is.na(three),'three', NA ),

但是在我真正的df中,我有很多列,那么这个wat是非常低效的。我需要一些更优雅的东西,使用mutate_at和列名,但这似乎很难。我试着用很多方法做到这一点,但每次我都会出错。有什么建议吗?

共有1个答案

尹何平
2023-03-14

如果数据集中只有1和NAs,则将col(df)与数据集相乘,取消列表并根据索引,将其替换为数据集的名称并将其分配回原始数据

df[] <- names(df)[unlist(col(df)*df)]
df
# A tibble: 3 x 3
#    one   two three
#  <chr> <chr> <chr>
#1   one  <NA> three
#2  <NA>  <NA> three
#3   one   two three

或者使用TidyVerse,我们可以为每个列(MAP2_DFfromPurrr)执行此操作

library(tidyverse)
df %>%
     map2_df(names(.), ~replace(., !is.na(.), .y))
# A tibble: 3 x 3
#    one   two three
#  <chr> <chr> <chr>
#1   one  <NA> three
#2  <NA>  <NA> three
#3   one   two three
 类似资料:
  • 我想把列表中的对象分配给类变量。 感恩节:)

  • 问题内容: 我有一个包含13个不同列名的数据框,我将这些标题分为两个列表。我现在想对每个列表执行不同的操作。 是否可以将列名作为变量传递给pandas?目前,我的代码可以在列表中循环,但是我在尝试将列名传递给函数时遇到了麻烦 码 问题答案: 我认为您可以使用创建自 : 也许更好,因为是,这是由创建:

  • 我正在将一个变量赋给一个数组,它是我在刀片文件中声明的。它返回一个错误 下面是我的代码: 我无法理解这个错误。谢谢!

  • 问题 现在有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量? 解决方案 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量。 唯一的前提就是变量的数量必须跟序列元素的数量是一样的。 代码示例: >>> p = (4, 5) >>> x, y = p >>> x 4 >>> y 5 >>> >>> data = [ 'ACME', 50,

  • 我的代码是这样的: 但最后一句话: 总是停止编译说我需要给新变量分配一个返回值?在if语句之前,已经为k分配了一个值。当我把随机k语句放在if语句中时,它似乎是有效的,但这使得它毫无价值,不是吗?编辑器本身没有错误,但是当我编译时,它给了我这个: 线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:41,大小:36。util。ArrayList。

  • 我试图将表中的一个现有列重命名为一个新列。但是在名称更改之后,新列只给我' NULL '值。 镶木地板中桌子的存储格式。 例如, 'user'是字符串数据类型的'Test'表中的一列。插入了一个值为'John'的示例记录。 结果:约翰 我已将“user”重命名为“user_name”,而无需更改任何数据类型。 结果:空 请让我知道如何解决这个问题? MSCK修理桌子的命令在这种情况下是否有用? 我