繁体   English   中英

整理放置在不同列中不同行中的相同有序数据

[英]Tidying same ordered data placed in different rows across different columns

我进行了批量导入,导致 df 以不整洁的方式结束。 问题出在原始数据库上,为此我无能为力。

在导入和 rotate_df 之后,我最终得到了这个

x   y   z
1   NA  NA
2   NA  NA
NA  1   NA   
NA  2   NA
NA  NA  1
NA  NA  2

基本上,相反,一个新文件的数据被堆叠添加,每个附加列的数据(旋转后)仅从前一列的 +34 行开始。

鉴于我无法使用更改原始数据库,是否有任何绝地技巧可以将我当前的 df 更改为此?

x   y   z
1   1   1
2   2   2

由于每个列都具有相同的信息,因此可以使我的 df 整洁。

谢谢你。

你可以试试

as.data.frame(lapply(df, na.omit))

#   x y z
# 1 1 1 1
# 2 2 2 2

更新:删除NA后,似乎所有变量的长度都不相同。 以以下数据为例:

x   y   z
1   NA  NA
2   NA  NA
NA  1   NA   
NA  2   NA
NA  NA  1
NA  NA  2
NA  NA  3

它的预期 output 是什么? 保持3喜欢

#  x  y  z
#  1  1  1
#  2  2  2
# NA AN  3

或丢弃它

#  x  y  z
#  1  1  1
#  2  2  2

或使用其他规则?

另一种可能的解决方案,基于purrr::map_dfc

library(purrr)

map_dfc(df, na.omit)

#> # A tibble: 2 × 3
#>       x     y     z
#>   <int> <int> <int>
#> 1     1     1     1
#> 2     2     2     2

如果您遇到矢量不匹配错误,则表明您的一些“正确”值也是 NA。 这些可能是您的数据库中的 NULL,或者由于类型不匹配而被 R 转换为 NA 的值:确保您知道它发生了什么并且您没有在导入中丢失数据。

也就是说,这意味着您可能想要使用您拥有的另一条信息 - 列以可重现的距离交错。

df <-
structure(list(x = c(1L, 2L, NA, NA, NA, NA), y = c(NA, NA, 1L, 
2L, NA, NA), z = c(NA, NA, NA, NA, 1L, 2L)), row.names = c(1L, 
2L, 3L, 4L, 5L, 6L), class = "data.frame")

stagger <- 2 # this would be 34 in your real data

df_compact <- as.data.frame(lapply(1:ncol(df), function(i) 
    df[((i-1)*stagger+1) : (i*stagger), i]
))
colnames(df_compact) <- colnames(df)

 df_compact
  x y z
1 1 1 1
2 2 2 2

这只有在nrow(df) = stagger * ncol(df)时才能正常工作。 如果没有,您将不会收到错误,而是会收到各种可怕的推算NA ,所以要非常小心,然后找到其他方法来验证您的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM