将单元格转换为 colnames
Converting cells into colnames
这是我的数据框的例子:
> df
n b c d
A Eeee Aaaa
B Aaaa Bbbb Jjjj
C Jjjj Cccc
D Aaaa Dddd
我想将单元格的值转换为唯一的列名,并用二进制值填充数据框,因此生成的数据框如下所示:
> resulting_df
n Aaaa Bbbb Cccc Eeee Jjjj
A 1 0 0 1 0
B 1 1 0 0 1
C 0 0 1 0 1
D 0 0 0 0 0
我确定应该有一种无需循环即可完成此操作的简单方法。请帮忙
reshape2
可以做到:
数据:
df=structure(list(n = structure(1:4, .Label = c("A", "B", "C", "D"
), class = "factor"), b = structure(c(2L, 1L, 3L, 1L), .Label = c("Aaaa",
"Eeee", "Jjjj"), class = "factor"), c = structure(1:4, .Label = c("Aaaa",
"Bbbb", "Cccc", "Dddd"), class = "factor"), d = structure(c(NA,
1L, NA, NA), .Label = "Jjjj", class = "factor")), .Names = c("n",
"b", "c", "d"), class = "data.frame", row.names = c(NA, -4L))
library(reshape2)
dcast(melt(df,id.vars = "n"),n ~value,fun.aggregate = length)
给出:
n Aaaa Bbbb Cccc Dddd Eeee Jjjj NA
1 A 1 0 0 0 1 0 1
2 B 1 1 0 0 0 1 0
3 C 0 0 1 0 0 1 1
4 D 1 0 0 1 0 0 1
然后您可以取消选择最后一列。
想法是将数据 melt()
成长格式,然后根据需要用 dcast()
重铸。
fun.aggregate=length
用于填充数据框的值对应于出现的次数。
这是我的数据框的例子:
> df
n b c d
A Eeee Aaaa
B Aaaa Bbbb Jjjj
C Jjjj Cccc
D Aaaa Dddd
我想将单元格的值转换为唯一的列名,并用二进制值填充数据框,因此生成的数据框如下所示:
> resulting_df
n Aaaa Bbbb Cccc Eeee Jjjj
A 1 0 0 1 0
B 1 1 0 0 1
C 0 0 1 0 1
D 0 0 0 0 0
我确定应该有一种无需循环即可完成此操作的简单方法。请帮忙
reshape2
可以做到:
数据:
df=structure(list(n = structure(1:4, .Label = c("A", "B", "C", "D"
), class = "factor"), b = structure(c(2L, 1L, 3L, 1L), .Label = c("Aaaa",
"Eeee", "Jjjj"), class = "factor"), c = structure(1:4, .Label = c("Aaaa",
"Bbbb", "Cccc", "Dddd"), class = "factor"), d = structure(c(NA,
1L, NA, NA), .Label = "Jjjj", class = "factor")), .Names = c("n",
"b", "c", "d"), class = "data.frame", row.names = c(NA, -4L))
library(reshape2)
dcast(melt(df,id.vars = "n"),n ~value,fun.aggregate = length)
给出:
n Aaaa Bbbb Cccc Dddd Eeee Jjjj NA
1 A 1 0 0 0 1 0 1
2 B 1 1 0 0 0 1 0
3 C 0 0 1 0 0 1 1
4 D 1 0 0 1 0 0 1
然后您可以取消选择最后一列。
想法是将数据 melt()
成长格式,然后根据需要用 dcast()
重铸。
fun.aggregate=length
用于填充数据框的值对应于出现的次数。