Цикл по рядам без «для» - PullRequest
0 голосов
/ 02 мая 2018

У меня есть датафрейм:

set.seed(1)
My_DF <- cbind(paste0("Project",1:10),rnorm(10))
colnames(My_DF) <- c( "Projeck_Name","Values")
My_DF



     Projeck_Name Values              
 [1,] "Project1"   "-0.626453810742332"
 [2,] "Project2"   "0.183643324222082" 
 [3,] "Project3"   "-0.835628612410047"
 [4,] "Project4"   "1.59528080213779"  
 [5,] "Project5"   "0.329507771815361" 
 [6,] "Project6"   "-0.820468384118015"
 [7,] "Project7"   "0.487429052428485" 
 [8,] "Project8"   "0.738324705129217" 
 [9,] "Project9"   "0.575781351653492" 
[10,] "Project10"  "-0.305388387156356"

и я хочу назначить столбец два в качестве значения для переменной в первом столбце. Другими словами Project1 будет переменной, которая содержит значение "-0.62645":

assign(My_DF[1,1],My_DF[1,2])

Я хочу выполнить это для всех проектов:

for(i in 1:length(My_DF[,1])) {
  assign(My_DF[i,1],My_DF[i,2])
}

Есть ли способ сделать это без цикла for эффективным способом?

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Это создаст 10 новых переменных Project1, Project2 и т. Д.

txt <- paste(df$Project_Name, "<-", df$Values, sep="")
eval(parse(text=txt))

Project1
[1] -0.6264538
Project2
[1] 0.1836433

Пример данных:

set.seed(1)
df <- data.frame(Project_Name=paste0("Project",1:10), Values=rnorm(10))
0 голосов
/ 02 мая 2018

Вместо создания 10 объектов в рабочей области, сохраните их в именованном списке .

# example dataframe
set.seed(1); My_DF <- data.frame(Projeck_Name = paste0("Project",1:10), Values = rnorm(10))

# keep each project value in a list
allProjects <- as.list(setNames(My_DF$Values, My_DF$Projeck_Name))

allProjects$Project1
# [1] -0.6264538
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...