Есть ли способ использовать цикл foreach для назначения значений по столбцам для столбца на основе другого числового столбца в одном кадре данных? - PullRequest
0 голосов
/ 08 января 2019

enter image description here У меня есть кадр данных с двумя столбцами, одним числовым и другим символьным столбцом

У меня почти 300 строк с числами и URL-ссылками

Исходя из числового столбца, я хочу циклически перебирать каждый URL от 1 до количества раз, сколько значение в num для каждой строки

Я пытался использовать этот код:

sites <- for (i in 1:df$v1) {
foreach (n = i, .combine = cbind) %dopar% {data.frame( paste(df$url, n,sep= ""))}}

Но этот код принимает только первое числовое значение и повторяется по всем URL-адресам вместо того, чтобы принимать числовые значения по строкам

Я ожидаю этого:

https://forums.vwvortex.com/showthread.php?9147410-Durango/page1
https://forums.vwvortex.com/showthread.php?9147410-Durango/page2

And so on ...

https://forums.vwvortex.com/showthread.php?9147410-Durango/page14
https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page1
https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page2

And so on ...

https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page5

Я ценю любую помощь или предложения по этому вопросу. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Мы можем сделать это с rep и sequence с base R

with(df, paste0(rep(url, V1), sequence(V1)))
# [1] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page1"     
# [2] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page2"     
# [3] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page3"     
# [4] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page4"     
# [5] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page5"     
# [6] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page6"     
# [7] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page7"     
# [8] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page8"     
# [9] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page9"     
#[10] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page10"    
#[11] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page11"    
#[12] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page12"    
#[13] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page13"    
#[14] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page14"    
#[15] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page1"
#[16] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page2"
#[17] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page3"
#[18] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page4"
#[19] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page5"

Или используя foreach

library(foreach)
out <- foreach(i = seq_len(nrow(df)), .combine = rbind) %dopar% 
           data.frame(Col1 = paste0(df$url[i], seq(df$V1[i])))

данные

df <- structure(list(url = structure(2:1, 
.Label = c("https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page", 
  "https://forums.vwvortex.com/showthread.php?9147410-Durango/page"
 ), class = "factor"), V1 = c(14, 5)), class = "data.frame", row.names = c(NA, 
-2L))
0 голосов
/ 08 января 2019

Если вы хотите перебрать каждую строку в одну сторону, используя sapply

sapply(1:nrow(df), function(i) paste0(df$url[i], seq_len(df$V1[i])))

#[[1]]
# [1] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page1" 
# [2] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page2" 
# [3] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page3" 
# [4] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page4" 
# [5] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page5" 
# [6] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page6" 
# [7] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page7" 
# [8] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page8" 
# [9] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page9" 
#[10] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page10"
#[11] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page11"
#[12] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page12"
#[13] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page13"
#[14] "https://forums.vwvortex.com/showthread.php?9147410-Durango/page14"

#[[2]]
#[1] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page1"
#[2] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page2"
#[3] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page3"
#[4] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page4"
#[5] "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page5"

Это дает вам список векторов символов, но вместо этого, если вы хотите, чтобы все было только как один вектор, вы могли бы unlist sapply вызвать

unlist(sapply(1:nrow(df), function(i) paste0(df$url[i], seq_len(df$V1[i]))))

Предполагая, что ваши исходные данные примерно такие:

df<- data.frame(url=c(
 "https://forums.vwvortex.com/showthread.php?9147410-Durango/page", 
 "https://forums.vwvortex.com/showthread.php?8943521-Larger-tires/page"), 
               V1 = c(14, 5))
...