2015-05-23 17 views
5

Tôi có khung dữ liệu bao gồm n cột và một trong số đó là food. Giá trị có thể là food cột có thể là apple, tomato, cabbage, sausage, beer, vodka, potato. Tôi muốn tạo một cột mới trong khung dữ liệu data như sau: nếu food==apple hoặc food==tomato hoặc food==potato, sau đó chỉ định vegetables, nếu không chỉ gán giá trị data$food.R tạo cột mới dựa trên nếu điều kiện khác

Vì vậy, nếu khung dữ liệu là như thế này:

ID ..(some other columns).. food 

1       apple 
2       sausage 
3       tomato 
4       cabbage 
5       vodka 

thì kết quả sẽ như sau:

ID ..(some other columns).. food  category 

1       apple  vegetable 
2       sausage  sausage 
3       tomato  vegetable 
4       cabbage  vegetable 
5       vodka  vodka 

Làm thế nào tôi có thể làm điều đó?

Trả lời

4

Tôi sẽ sao chép biến và tìm những hàng nào tương ứng với tiêu chí của bạn và chỉ thay thế giá trị cho các hàng đó. Tôi cũng đã thêm một cấp độ nhân tố mới cho sổ kế toán gọn gàng.

xy <- data.frame(food = sample(c("apple", "tomato", "cabbage", "sausage", "beer", "vodka", "potato"), 50, replace = TRUE)) 

xy$newcol <- xy$food 
levels(xy$newcol) <- c(levels(xy$newcol), "veggy") 
xy[xy$food %in% c("apple", "tomato", "potato"), "newcol"] <- "veggy" 
xy 

     food newcol 
1 apple veggy 
2 vodka vodka 
3 sausage sausage 
4 cabbage cabbage 
5 vodka vodka 
6 potato veggy 
7 cabbage cabbage 
8 cabbage cabbage 
... 
1

Bạn có thể sử dụng recode từ car, mà sẽ làm việc với cả hai 'nhân vật' và cột 'tố'. Đối với các cột 'yếu tố', các mức không sử dụng bị giảm trong khi các cấp mới được thêm vào.

library(car) 
xy$newcol <- recode(xy$food, "c('apple', 'tomato', 'potato')='veggy'") 

LƯU Ý: xy từ bài @Roman Lustrik của

Nếu bạn đang sử dụng data.table, điều này có thể được thực hiện với (cập nhật cùng một cột)

library(data.table) 
setkey(setDT(xy), food)[J(c('apple', 'tomato', 'potato')), food:='veggy'] 
1

gì về điều này?

# df is your data frame 
veg <- c("tomato", "apple", "potato") 
df$category <- ifelse(df$food %in% veg, "vegetable", df$food) 
Các vấn đề liên quan