在枢轴加宽后,将R中的NULL替换为NA

k5ifujac  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(212)

我有一个巨大的数据集,我使用pivot_wideer函数进行了转换。这导致了很多包含NULL的值。现在我想将这些值转换为NA,但我的方法似乎都不起作用:
df %>% replace(.=="NULL", NA)
df[df==0] <- NA
此外,当使用pivot_wideer函数时,values_fill = NA参数也不会产生任何NA。
先谢谢你的帮助。

jecbmhm3

jecbmhm31#

我认为你有这样的数据-

df <- data.frame(a1 = c(1, 1, 1, 1,2), a2 = 1:5, a3 = c('a', 'b', 'c', 'a', 'b'))

df
#  a1 a2 a3
#1  1  1  a
#2  1  2  b
#3  1  3  c
#4  1  4  a
#5  2  5  b

然后使用pivot_wider,它返回

df1 <- tidyr::pivot_wider(df, names_from = a3, values_from = a2)

#     a1   a         b         c        
#  <dbl> <list>    <list>    <list>   
#1     1 <dbl [2]> <dbl [1]> <dbl [1]>
#2     2 <NULL>    <dbl [1]> <NULL>

这也会返回警告消息-
警告信息:值不是唯一标识的;输出将包含列表列。

  • 使用values_fn = list可取消显示此警告。
  • 使用values_fn = length标识出现重复的位置
  • 使用values_fn = {summary_fun}汇总重复项

要回答有关将这些NULL值替换为NA的问题,您可以执行以下操作-

df1 <- df1 %>% mutate(across(a:c, ~replace(., lengths(.) == 0, NA)))
df1

#    a1    a         b         c        
#  <dbl> <list>    <list>    <list>   
#1     1 <dbl [2]> <dbl [1]> <dbl [1]>
#2     2 <lgl [1]> <dbl [1]> <lgl [1]>

但是,如果pivot_wider issue "Values in values_from are not uniquely identified; output will contain list-cols"对您的数据来说是更好的选择,您不应该忽略这些警告并选中它。

c0vxltue

c0vxltue2#

如果要将 Dataframe 中的所有NULL值替换为NA,可以执行以下操作-

df1 <- df1 %>% mutate_all( ~replace(., lengths(.)==0, NA))

如果要将所有NULL值替换为0,请在代码中将NA更改为0。

相关问题