【发布时间】:2016-08-18 07:20:03
【问题描述】:
我相信我的问题既是关于整理杂乱数据的最佳实践,也是关于整理杂乱数据的问题。
以下是数据框 lang.df 的摘录,这是一个全校学生数据集。 Langauge.Home 列表示家长对问题的回答:
“你在家说什么语言?”
> lang.df
Nationality Language.Home
1 HK Mandarin
2 German Mandarin/English/German
3 Saudi Arabic
4 Norwegian Norwegian
5 UK English
6 HK Mandarin/ Min Nan dialect
7 Australian Mandarin
8 HK Mandarin
9 Brazilian Portuguese/English
10 Indian Hindi/English
对我来说很明显,这是获取这些信息的糟糕方式以及存储信息的糟糕方式,但我的工作是使用我拥有的数据。
结果
我想探讨某些母语可能对成就产生的影响。我需要的是能够通过在家说的一种语言(例如在家说英语的学生)进行子集化。
为此,看来我必须使用 dplyr 的 separate() 将 Language@home 列分成三个 ("language.home1", "language.home2", "language.home3")。为我创建的新列中的每个唯一值(即语言)创建一个新列
流程
以下是我尝试有效地执行上述操作
library(dplyr)
library(tidyr)
#separate Langauge.Home into three new columns
lang.df <- lang.df %>% separate(Language.Home,
c("language.home1", "language.home2", "language.home3"),
sep = "/",
remove = FALSE)
#find distinct languages & remove NAs
langs <- unique(c(lang.df$language.home1,
lang.df$language.home2,
lang.df$language.home3))
langs <- langs[!is.na(langs)]
#create boolean column for each unique language in new columns
for (i in langs) {
lang.df[,paste(i)] <- grepl(i, lang.df$Language.Home)
}
问题
- 这种情况叫什么?我试图查看
tidyr文档和此处的 SO 但找不到任何相关信息。 - 有没有比我所做的更优雅的转换编码方式?
- 什么是最佳实践
- 获取此数据(以更改未来的数据输入流程)
- 从统计角度处理这种情况
提前感谢您的帮助。我现在只断断续续地使用 R 大约一年,这是我的第一篇 SO 帖子。尽可能多地给我反馈!
数据
lang.df <- structure(list(Nationality = structure(c(4L, 3L, 7L, 6L, 8L,
4L, 1L, 4L, 2L, 5L), .Label = c("Australian", "Brazilian", "German",
"HK", "Indian", "Norwegian", "Saudi", "UK"), class = "factor"),
`Language.Home` = structure(c(4L, 6L, 1L, 7L, 2L, 5L, 4L,
4L, 8L, 3L), .Label = c("Arabic", "English", "Hindi/English",
"Mandarin", "Mandarin/ Min Nan dialect", "Mandarin/English/German",
"Norwegian", "Portuguese/English"), class = "factor")), row.names = c(NA,
10L), .Names = c("Nationality", "Language.Home"), class = "data.frame")
【问题讨论】:
-
也可以试试:
cSplit_e(lang.df, "Language.Home", "/", type = "character", fill = 0).