2017-03-10 85 views
-1

我試圖解決的問題如下: 我有一個數據框,說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

如果你想不寫使用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將不會使用,因爲有重複,這是可以的,可以忽略)

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