2016-10-19 6 views
0

Информационная рамка такова, как показано ниже. У меня есть набор данных с 50 + переменными, все обозначенные Var_1 .. Var_50. Одна из 50 переменных имеет код страны (Великобритания или США). Кадр данных структурирован таким образом, что если var_5 = "UK", то var_4 всегда содержит номер магазина.R Программирование: извлечение предыдущей величины столбца на основе условия

Код, который я хочу написать, - если var_5 = UK, then country = "var_5" и store = "var_4". Если я могу настроить цикл, поэтому мне не нужно копировать-вставить это 50 раз, это было бы здорово!

ID Brand Var_1  Var_2  Var_3  Var_4  Var_5 
1 Soaps Supervisor Quantity StoreK UK   Owner 
2 Shampoo StoreZ  US   
3 Oil  Material StoreY  UK  Supplier 

То, что я хочу ниже кадра данных

ID Brand Var_1  Var_2  Var_3  Var_4 Country StoreID 
1 Soaps Supervisor Quantity StoreK UK  UK   StoreK 
2 Shampoo StoreZ  US       US   StoreZ 
3 Oil  Material StoreY  UK     UK   StoreY 

Надеется, что это проясняет мой вопрос.

+1

Отформатируйте набор данных. Неясно, где заканчивается ваша колонка и начинается новый столбец. Используйте 'dput', чтобы показать пример наряду с ожидаемым выход – akrun

ответ

0

Поскольку колонка, содержащая сведения о стране и хранении, уже существует, нет необходимости создавать дополнительные столбцы, просто переименуйте их.

the.data <- data.frame(Brand = c("Soap", "Oil", "Mail"), var1 = rnorm(3), var2 = c("store_K", "store_xs", "store_k"), var3 = c("UK", "AL", "USA")) 
# subset your data frame and select rows that are UK or US 
uk.data <- the.data[grep("UK|US", the.data$var3), ] 
# rename the columns 
colnames(uk.data)[3:4]<- c("Store", "Country") 
+0

ID Марка \t \t var_1 Var_2 \t \t Var_3 VAR_4 1 Мыло \t \t Supervisor Количество \t StoreK \t \t UK 2 Шампунь \t StoreZ \t \t США 3 Масло \t \t Материал Storey \t \t UK –

0

Вы можете попробовать:

data <- data.frame(ID = c(1,2,3), Brand = c("Soaps", "Shampoo", "Oil"), 
         Var_1 = c("Supervisor", "Storez", "Material"), 
         Var_2 = c("Quantity", "US", "StoreY"), 
         Var_3 = c("StoreK", "", "UK"), 
         Var_4 = c("UK", "", "")) 


tmp <- data.frame(t(apply(data, 1, function(x) { pos = grep("UK|US", x) 
               if (length(pos)) {c(x[pos], x[pos - 1])} 
               else { c("", "") } 
               }))) 

names(tmp) <- c("Country", "Store") 
data <- cbind(data, tmp) 
+0

Привет, спасибо за ваш ответ. Это дает мне ошибку ниже. –

+0

error: Warning message: В '[.data.table' (out,,': = '(c (« Страна »,« Сохранить »), as.data.table (tmp))): Поставляется 2 столбца для назначения списка (длина 12992) значений (12990 неиспользованных) –

+0

Привет, Шри, попробуйте сейчас! – User2321