2016-06-11 5 views
-1

Я хочу сделать data.frame с двумя столбцами. Первый с Id твитов, а второй столбец информации зависит от того, твит ответ или ретвитdata.frame с данными twitter

id_str | x$retweeted_status$id_str or x$in_reply_to_status_id_str 

я могу сделать dataframe с тремя столбцами буэ мне нужно два.

Мой код:

ids <- sapply(tweets.list, function(x) x$id_str) 
    ret_ids <- sapply(tweets.list, function(x) if(is.null(x$retweeted_status)) NA else x$retweeted_status$id_str) 
    rep_ids <- sapply(tweets.list, function(x) if(is.null(x$in_reply_to_status_id_str)) NA else x$in_reply_to_status_id_str) 
    isnt.null <- function(x)!is.null(x) 
r_ids <- sapply(tweets.list, function(x) if(is.null(x$retweeted_status)) x$in_reply_to_status_id_str else x$retweeted_status$id_str) 
data.frame(ids,r_ids) 

Выход:

Error in data.frame("733222936912351232", NULL, "733220677721968641", : 
    arguments imply differing number of rows: 1, 0 

данных:

ids|ret_ids|rep_ids 
1|40|NA 
2|32|NA 
3|NA|555 
4|NA|444 

желаемого результата:

ids|r 
1|40 
2|32 
3|555 
4|444 
+0

Пожалуйста, добавьте некоторые данные, чтобы сделать это [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610 # 5963610) – alistaire

+0

Готово. Спасибо. –

+0

У вас все еще нет данных, которые фактически позволяют запустить код. Если вы просто хотите делить три столбца на два, 'data.frame (ids = df [, 1], r = rowSums (df [, - 1], na.rm = T))'. – alistaire

ответ

0

Вот один из способов

df <- read.table(header=T, sep="|", text="ids|ret_ids|rep_ids 
1|40|NA 
2|32|NA 
3|NA|555 
4|NA|444") 

setNames(as.data.frame(t(apply(df, 1, na.omit))), c("ids", "r")) 
# ids r 
# 1 1 40 
# 2 2 32 
# 3 3 555 
# 4 4 444 
Смежные вопросы