首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合使用pivot_longer和pivot_wider

结合使用pivot_longer和pivot_wider
EN

Stack Overflow用户
提问于 2021-10-04 11:31:08
回答 3查看 185关注 0票数 2

我有一个数据文件,在不同的专栏中有很多NaN

代码语言:javascript
复制
df <- data.frame(
  Data1 = c(3,2,1,NaN, NaN, NaN),
  Data2  = c(NaN, NaN, NaN, 3,5,3),
  Data3 = c(NaN, NaN, 7,5,1, NaN)
)

我试图通过使用NaN值的pivot_longer、对NaN值的filter以及使用pivot_wider将正数再次放回它们的原始列中来摆脱这些值,然而,这些方法失败了:

代码语言:javascript
复制
library(tidyr)
df %>%
  pivot_longer(c("Data1","Data2","Data3")) %>%
  filter(!is.na(value)) %>%
  pivot_wider(names_from = name,
              values_from = value)
# A tibble: 1 x 3
  Data1     Data3     Data2    
  <list>    <list>    <list>   
1 <dbl [3]> <dbl [3]> <dbl [3]>
Warning message:
Values are not uniquely identified; output will contain list-cols.
* Use `values_fn = list` to suppress this warning.
* Use `values_fn = length` to identify where the duplicates arise
* Use `values_fn = {summary_fun}` to summarise duplicates 

代码有什么问题,如何实现这个输出?

代码语言:javascript
复制
  Data1 Data2 Data3
      3     3     7
      2     5     5
      1     3     1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-04 11:34:13

代码不一定会失败,但是返回一个警告,因为每个单元格中有多个值。如果每个列中的值数相同,则可以unnest列表输出。

代码语言:javascript
复制
library(dplyr)
library(tidyr)

df %>%
  pivot_longer(starts_with('Data'), values_drop_na = TRUE) %>%
  arrange(name) %>%
  pivot_wider(names_from = name,values_from = value, values_fn = list) %>%
  unnest()

#  Data1 Data2 Data3
#  <dbl> <dbl> <dbl>
#1     3     3     7
#2     2     5     5
#3     1     3     1
票数 2
EN

Stack Overflow用户

发布于 2021-10-04 11:39:03

这个特殊的问题可以用purrr巧妙地解决。

代码语言:javascript
复制
map_dfr(df, na.omit)

  Data1 Data2 Data3
  <dbl> <dbl> <dbl>
1     3     3     7
2     2     5     5
3     1     3     1
票数 3
EN

Stack Overflow用户

发布于 2021-10-05 04:46:02

R基地:

我更喜欢sapplyna.omit

代码语言:javascript
复制
sapply(df, na.omit)

输出:

代码语言:javascript
复制
  Data1 Data2 Data3
  <dbl> <dbl> <dbl>
1     3     3     7
2     2     5     5
3     1     3     1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69435246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档