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

将列名赋给值

贺光华
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。

  • 我试图使用elasticsearch使用ngrams进行名称搜索匹配,我试图实现的技术如下: 输入:需要与数据库匹配的名称。 输出:来自我的名称数据库的所有潜在名称匹配。 我尝试这样做的方法如下:我将名称拆分为长度为3-5的ngrams。 然后我从数据库中收集所有与这些ngrams匹配的名称。 然后我检查ngrams并按反向频率对它们进行排序, 这意味着普通ngrams将得到最低的分数。 例如,如