使用for循环为R中的字符串数据创建数据帧

时间:2017-03-24 12:12:25

标签: r

我的csv文件包含以下数据。

我想把这些数据放在数据框“dfSubClass”中。 之后我将找到唯一的主题列表作为“uniquesubject”,将唯一的类列表作为“uniqueclass”形式“dfSubClass”。 使用“uniquesubject”,“uniqueclass”和for循环我想创建所有主题和类组合

csv and expected data 我试过跟随,但它不起作用。

dfSubClass <- read.csv("SubjectClass.csv",header = TRUE)
uniquesubject = unique(planningItems["Subject"])
uniqueclass = unique(planningItems["Class"])
newDF <- data.frame()
for(Subject in 1:nrow(uniquesubject)){
 for(Class in 1:nrow(uniqueclass)){
  newDF = rbind(newDF,c(uniquesubject[Subject,],uniqueclass[Class,]))
  }
} 

这不给我想要的输出请帮助。

1 个答案:

答案 0 :(得分:0)

我建议使用expand.grid函数自动生成所有组合。

同样在您的代码unique(planningItems["Subject"])中,它将返回一个数据框,这对于这种情况实际上并不是一个好主意。矢量会更好。

这是我的代码:

uniquesubject = unique(dfSubClass$Subject)
uniqueclass = unique(dfSubClass$Class)
newDF=expand.grid(uniquesubject,uniqueclass)

如果使用for循环,则代码中的主要问题与rbind函数有关。这是我的代码:

uniquesubject = unique(dfSubClass$Subject)
uniqueclass = unique(dfSubClass$Class)
newDF = data.frame()
for (Subject in 1:length(uniquesubject)){
    for (Class in 1:length(uniqueclass)){
         newDF=rbind(newDF,data.frame("Subject"=uniquesubject[Subject],"Class"=uniqueclass[Class]))
    }
}

我认为与您的代码的主要区别在于我在rbind()内创建了一个数据框,而不是使用c()创建一个向量。这是为了确保结果是数据帧结构而不是矩阵。