R根据列中的uniqe值动态创建新列
我想根据一列中的唯一值动态创建新列。原件:R根据列中的uniqe值动态创建新列,r,dataframe,multiple-columns,R,Dataframe,Multiple Columns,我想根据一列中的唯一值动态创建新列。原件: id, category 1, a 2, b 3, c 4, b 新的: 目前我确实: data$categoryA = ifelse(data$category=="a", 1, 0) data$categoryB = ifelse(data$category=="b", 1, 0) ... 但我想动态地这样做: for(CATEGORY in unique(data$category) { data$CATEGORY = ifelse(d
id, category
1, a
2, b
3, c
4, b
新的:
目前我确实:
data$categoryA = ifelse(data$category=="a", 1, 0)
data$categoryB = ifelse(data$category=="b", 1, 0)
...
但我想动态地这样做:
for(CATEGORY in unique(data$category) {
data$CATEGORY = ifelse(data$CATEGORY =="a", 1, 0)
}
我们可以应用
table
,将其转换为data.frame
和cbind
,并使用原始数据集
cbind(df1, as.data.frame.matrix(table(df1)))
# id category a b c
#1 1 a 1 0 0
#2 2 b 0 1 0
#3 3 c 0 0 1
#4 4 b 0 1 0
您建议的代码无法工作,因为您正在使用
data$VARIABLE
在数据框中创建新变量:
for(CATEGORY in unique(data$category) {
data$CATEGORY = ifelse(data$CATEGORY =="a", 1, 0)
}
如果使用
for(CATEGORY in unique(data$category) {
data[[CATEGORY]] = ifelse(data$CATEGORY =="a", 1, 0)
}
我使用:
factor2binary=函数(inputvar)
{
我觉得这已经被问了至少四万五千次了
for(CATEGORY in unique(data$category) {
data[[CATEGORY]] = ifelse(data$CATEGORY =="a", 1, 0)
}
factor2binary=function(inputvar)
{
set.l <- unique(inputvar)
x=(sapply(set.l, function(x) as.numeric( inputvar == x)))
colnames(x)=unique(inputvar)
x
}
A=sample(LETTERS[1:4],100,rep=T
factor2binary(A)
D A C B
[1,] 1 0 0 0
[2,] 1 0 0 0
[3,] 0 1 0 0
[4,] 1 0 0 0
[5,] 0 0 1 0
[6,] 0 1 0 0
...