2015-11-18 2 views
1

Так что у меня есть очень простой dataframe так:Перебор кадра данных и сравнения

v h ptsv ptsh 
PIT NE 21 28 
GB KC 31 23 
CHI HOU 27 20 

Он имеет посетителя (v) и команду (h) столбцов и имеет точки забивший (ptsv, ptsh). Я хочу создать новый столбец в фрейме данных, который сравнивает оценку и вводит инициалы команды хозяев или гостей.

Я написал этот код:

tbl2$win <- rep("x",nrow(tbl2)) <BR> 
tbl2$win <- ifelse(tbl2$ptsh > tbl2$ptsv, tbl2$h, tbl2$v) 

Вместо печати из инициалов, она выводит число, что они будут в алфавитном порядке. Тем не менее новый для R.

ответ

2
tbl2$win <- ifelse(tbl2$ptsh > tbl2$ptsv, tbl2$h, tbl2$v) 

Ваша первая строка кода не требовалось

+0

Интересно, но мне было интересно, почему он не печатает, что новый столбец фактических значений например, «NE», «CHI» и т. д., он печатает цифры 1: 6 из-за того, что я предполагаю, это алфавитное эквивалентное пятно (уровни = CHI, GB, HOU, KC, NE, PIT) –

1

Вы factor данные в вашем data.frame, которые будут путать ifelse:

str(tbl2) 
#'data.frame': 3 obs. of 4 variables: 
# $ v : Factor w/ 3 levels "CHI","GB","PIT": 3 2 1 
# $ h : Factor w/ 3 levels "HOU","KC","NE": 3 2 1 
# ... 

С помощью-страницы ?ifelse примеры:

## ifelse() полосы атрибуты
## Это очень важен при работе с датами и факторы

Преобразовать эти столбцы as.character первые:

tbl2[c("v","h")] <- lapply(tbl2[c("v","h")], as.character) 
ifelse(tbl2$ptsh > tbl2$ptsv, tbl2$h, tbl2$v) 
#[1] "NE" "GB" "CHI"