【发布时间】:2021-02-24 00:48:10
【问题描述】:
我在下面有一个循环来创建新变量并使其成为新列。但是创建的列名是..有问题。我希望它是“cat1”、“cat2”、...“cat9”。但是,新列的名称是“cat1....a..1..”、“cat2....a..2..”、“cat3....a..3..”
这样定义列名是错误的方式吗? cat1
summary_cat_df <- data.frame()
id=1
idx=4
for (j in 1:length(cat_id_files)){ #44
for (i in 1:length(cat_id_files[[j]])){ #10
a <- summary_cat(cat_id_files[[j]][i], j, i)
if(j %% 4 ==1){
new_row <- data.frame(id=idx_list[[j]][i], type=name_list[[j]][i], iter=i, eye = "c", head="f", cat1 <- a[[1]], cat2 <- a[[2]], cat3 <- a[[3]], cat4 <- a[[4]], cat5 <- a[[5]], cat6 <- a[[6]], cat7 <- a[[7]], cat8 <- a[[8]], cat9 <- a[[9]])
# column names are cat1....a..1..", "cat2....a..2.." not "cat1", "cat2",... "cat9".
}
summary_cat_df<- rbind(summary_cat_df, new_row)
}
}
# the return value of summary_cat() is a dataframe
summary_cat <- function(df, j, i){
cat_1 =0
cat_2 =0
cat_3 =0
cat_4 =0
cat_5 =0
cat_6 =0
cat_7 =0
cat_8 =0
cat_9 =0
cat_10 =0
cat_11 =0
row_num <- nrow(get(cat_id_files[[j]][i]))
row_num2 <- row_num -1
for (k in 1: row_num2){
temp_value <- get(cat_id_files[[j]][i])$slope_deviations_cat[[k]]
#print(temp_value)
if(temp_value == 1 ){
cat_1 <- cat_1 + 1
}else if(temp_value == 2 ){
cat_2 <- cat_2 + 1
}else if(temp_value == 3 ){
cat_3 <- cat_3 + 1
}else if(temp_value == 4 ){
cat_4 <- cat_4 + 1
}else if(temp_value == 5 ){
cat_5 <- cat_5 + 1
}else if(temp_value == 6 ){
cat_6 <- cat_6 + 1
}else if(temp_value == 7 ){
cat_7 <- cat_7 + 1
}else if(temp_value == 8 ){
cat_8 <- cat_8 + 1
}else if(temp_value == 9 ){
cat_9 <- cat_9 + 1
}else if(is.na(temp_value)){
print("NA")
}
}
result<-data.frame(cat_1 = cat_1,
cat_2 = cat_2,
cat_3 = cat_3,
cat_4 = cat_4,
cat_5 = cat_5,
cat_6 = cat_6,
cat_7 = cat_7,
cat_8 = cat_8,
cat_9 = cat_9)
return(result)
}
> a <- summary_cat(cat_id_files[[1]][1], 1, 1)
> a
cat_1 cat_2 cat_3 cat_4 cat_5 cat_6 cat_7 cat_8 cat_9
1 80 0 87 0 0 0 68 0 246
> a[1]
cat_1
1 80
简单来说,我可以使用来解决这个问题
colnames(summary_cat_df)[6] <- "cat1"
不过,我想知道为什么列名这样定义,'cat1..a..1'?
任何改进代码的 cmets 都会很棒。我还在学习! 提前致谢。
【问题讨论】: