我想解决的问题如下: 我有一个数据框,比如c,它有一个名为“WasteType”的列名。现在,“WasteType”包含几个因子值(T,U,V等),此列表可能因不同的数据集而异。 我想根据不同的因子值创建新的列T,U等,它将是动态的。这是我创建的功能。如果我得到一些指导和指导,将会有所帮助。
首先,看看我的功能是否正常。我从数据帧中取出前四行,而WasteType仅包含“T”和“U”。所以,我想添加一个列T,如果WastType列有1则显示1,否则为0。同样对于U列。
d<-function(c,x=c$WasteType){
x1<-unique(x)
print (x1)
s<-length(x1)
n<-ncol(c)
print(s)
for(i in 1:s){
print(x1[i])
mutate(c,ifelse(x==c(x1[i]),1,0)) ##adding a new column
colnames(c)[n+1]<-x1[i] ##renaming the column
return(c)
}
}
d(c,x=c$WasteType)
我无法弄清楚为什么上面的函数无法读取mutate()函数。
在R语言编程方面,我还处于一个非常新生的阶段。虽然我在发布之前先查看了几个问题。问题可能看起来很愚蠢,但我还没能解决。
答案 0 :(得分:0)
我稍稍调整了你的功能:
c <- data.frame(WasteType = c('T', 'U', 'T', 'U'), stringsAsFactors = FALSE)
d <-function(c, x = c$WasteType) {
x <- c$WasteType
x1 <- unique(x)
s <-length(x1)
n <- ncol(c)
for(i in seq_len(s)) {
c <- mutate(c, ifelse(x == x1[i], 1, 0))
colnames(c)[n + i] <- x1[i]
}
return(c)
}
d(c, x = c$WasteType)
WasteType T U
1 T 1 0
2 U 0 1
3 T 1 0
4 U 0 1
答案 1 :(得分:0)
如果您想要一个解决方案而不使用sapply
编写函数:
c <- data.frame(WasteType = c('T', 'U', 'T', 'U'), stringsAsFactors = FALSE)
d <- t(sapply(c$WasteType,function(x) as.numeric(unique(c$WasteType) %in% x)))
colnames(d) <- unique(c$WasteType)
> cbind(c,d)
WasteType T U
1 T 1 0
2 U 0 1
3 T 1 0
4 U 0 1
(你会得到一个警告,对象d
不会使用row.names,因为有重复项,这是可以的,可以忽略)