将行映射到R中的列列表

时间:2020-10-27 02:49:43

标签: r

我有一个像这样的chr向量:

t<-c("lucas","2","3","luciano","1","5","jack","1","luciana","2","3","4","5")

Lucas,2,3将是同一客户。 Luciano,1,5将会是一个不一样的,依此类推。

我创建了两个向量,在其中定义每个客户的限制。

start<-c(1,4,7,9)
end<-c(3,6,8,13)

我需要将它们映射到列列表中。因此,每个客户都有一栏。如果我单击它,我将打开每个客户矩阵。

在这种情况下,我想象一个具有三行的列列表。如果我单击卢卡斯的列表,我将拥有

卢卡斯2 3

还有露西安娜

Luciana 2 3 4 5

有什么办法可以用地图做到这一点?

2 个答案:

答案 0 :(得分:0)

我不知道如何使用map来做到这一点,但是mapply似乎工作得很好:

t<-c("lucas","2","3","luciano","1","5","jack","1","luciana","2","3","4","5")

start<-c(1,4,7,9)
end<-c(3,6,8,13)

output <- mapply(start, end, FUN = function(start_i, end_i){
  t[start_i:end_i]
})

Output

或者您可能会喜欢列表名称并执行以下操作:

output <- mapply(start, end, FUN = function(start_i, end_i){
  t[(start_i+1):end_i]
})
names(output) <- t[start]

enter image description here

答案 1 :(得分:0)

您可以使用@Gregor Thomas所示的map,但您认为map2更合适,类似于@Dubukay显示的基本R选项mapply

对于您的问题中的单击和打开矩阵部分,我感到很困惑,但也许您是想设置列表的名称。

list_vec <- purrr::map2(start, end, ~t[.x:.y])
names(list_vec) <- t[start] 
list_vec

#$lucas
#[1] "lucas" "2"     "3"    

#$luciano
#[1] "luciano" "1"       "5"      

#$jack
#[1] "jack" "1"   

#$luciana
#[1] "luciana" "2"       "3"       "4"       "5"      

因此,现在您可以使用list_vec$lucas获取所有lucas'元素。