在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编写函数似乎不是最明显的范例之一。谢谢