如何根据data.frame中的列访问data.frame中列表的成员?

时间:2016-09-06 17:14:29

标签: r dataframe

我有一个data.frame,如下所示:

x <- structure(list(tsv_level = c(2, 3, 2, 3, 2, 2), tsv_payout = structure(list(
    c(0, 700, 1400, 2100, 2800), c(0, 300, 600, 900, 1200), c(0, 
    300, 600, 900, 1200), c(0, 3000, 6000, 9000, 12000), c(0, 
    700, 1400, 2100, 2800), c(0, 1000, 2000, 3000, 4000)), class = "AsIs")), .Names = c("tsv_level", 
"tsv_payout"), row.names = c(NA, -6L), class = c("tbl_df", "tbl", 
"data.frame"))

我想创建一个第3列,它返回tsv_levelth中每个列表的tsv_payout元素。

我可以通过为第1行执行此操作:x$tsv_payout[[1]][2]x$tsv_payout[[2]][3]第2行,但是如何对data.frame中的所有行执行此操作?

3 个答案:

答案 0 :(得分:3)

你可以隐藏&#34;

的循环
x$v = with(x, mapply(`[[`, tsv_payout, tsv_level))

或类似transform

答案 1 :(得分:1)

Frank的答案有效,并且只依赖于基础R,但它看起来像dplyr包中的rowwise()也适用于此。

x %>% rowwise() %>%
    mutate(v = tsv_payout[tsv_level]) 

答案 2 :(得分:1)

不如@Frank的解决方案好,但它也能完成这项工作:

x$v <- sapply(seq_along(x$tsv_level), function(i) x$tsv_payout[[i]][x$tsv_level[i]])