Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中将复杂的凌乱数据整理成长数据格式_R_Dplyr_Tidyr_Reshape2_Tidyverse - Fatal编程技术网

在R中将复杂的凌乱数据整理成长数据格式

在R中将复杂的凌乱数据整理成长数据格式,r,dplyr,tidyr,reshape2,tidyverse,R,Dplyr,Tidyr,Reshape2,Tidyverse,我可以通过创建数组、转换数组并组合数组,或者通过base::restrape手动完成这项工作。然而,我想通过跳进垃圾桶中死去,来达到最终的真理,但现在我淹死了 我有这样的数据: id A B 1 2 3 1 3 4 1 5 5 1 - 6 1 - 7 2 ... 我想要这个: id A1 A2 A3 B1 B2 B3 B4 B5 1 2 3 5 3 4 5 6 7 2 ... 变量A和B中的实际值在上面是任意的,我的实际数据有10多个A和B对,有500多个ids。显

我可以通过创建数组、转换数组并组合数组,或者通过
base::restrape
手动完成这项工作。然而,我想通过跳进垃圾桶中死去,来达到最终的真理,但现在我淹死了

我有这样的数据:

id A B
1  2 3
1  3 4
1  5 5
1  - 6
1  - 7
2 ...
我想要这个:

id A1 A2 A3 B1 B2 B3 B4 B5
1  2  3  5  3  4  5  6  7
2 ...
变量
A
B
中的实际值在上面是任意的,我的实际数据有10多个A和B对,有500多个
id
s。显然,我正在将数据推进“长”格式,但这对我的数据来说很有意义。而且,一旦它们被安排成那样,将它们塑造成长格式应该不难,对吗


有什么惯用的整洁方式吗?如果我们可以在一个函数调用中将整个内容(具有多个类似的
A
ish和
B
ish列)展平,那就太好了。

下面是一个使用
dplyr
tidyr
函数的解决方案
dt2
是最终输出

# Load package
library(dplyr)
library(tidyr)

# Create example data frame
dt <- read.table(text = "id A B
1  2 3
1  3 4
1  5 5
1  NA 6
1  NA 7",
                 header = TRUE, stringsAsFactors = FALSE)

# Process the data
dt2 <- dt %>%
  gather(Label, Value, -id) %>%
  drop_na(Value) %>%
  group_by(id, Label) %>%
  mutate(Label_Id = 1:n()) %>%
  unite(Col, Label, Label_Id, sep = "") %>%
  spread(Col, Value)

下面是一个使用
dplyr
tidyr
函数的解决方案
dt2
是最终输出

# Load package
library(dplyr)
library(tidyr)

# Create example data frame
dt <- read.table(text = "id A B
1  2 3
1  3 4
1  5 5
1  NA 6
1  NA 7",
                 header = TRUE, stringsAsFactors = FALSE)

# Process the data
dt2 <- dt %>%
  gather(Label, Value, -id) %>%
  drop_na(Value) %>%
  group_by(id, Label) %>%
  mutate(Label_Id = 1:n()) %>%
  unite(Col, Label, Label_Id, sep = "") %>%
  spread(Col, Value)

这是如何推广到平坦化更多的A1、B1等变量的?不确定你的意思是什么。即使有比您提供的示例更多的行,这个解决方案也应该可以工作。谢谢,我可以看到它可以处理更多的行(id)。然而,如果有许多类似的列,如上面的A和B,您如何放大?我想您可以编写一个函数,将列名作为输入,并输出所有列的平坦数据。请参阅我的更新。请注意,使用
dplyr
设计函数是一个全新的主题。如果您想了解更多信息,我建议您查看
vignette(“编程”)
了解有关使用
dplyr进行编程的更多信息。当你有一个明确的问题陈述时,发布一个新问题。这看起来像一个魔术,耶!是的,用dplyr编写函数似乎不是最明显的范例之一。谢谢这是如何推广到平坦化更多的A1、B1等变量的?不确定你的意思是什么。即使有比您提供的示例更多的行,这个解决方案也应该可以工作。谢谢,我可以看到它可以处理更多的行(id)。然而,如果有许多类似的列,如上面的A和B,您如何放大?我想您可以编写一个函数,将列名作为输入,并输出所有列的平坦数据。请参阅我的更新。请注意,使用
dplyr
设计函数是一个全新的主题。如果您想了解更多信息,我建议您查看
vignette(“编程”)
了解有关使用
dplyr进行编程的更多信息。当你有一个明确的问题陈述时,发布一个新问题。这看起来像一个魔术,耶!是的,用dplyr编写函数似乎不是最明显的范例之一。谢谢