[英]Apply row to values between nominal rows
我毫不懷疑以前有人問過這個問題,但我一生都無法弄清楚如何以一種我能找到答案的方式來表達它。
我有以下數據來自 a.csv
1 Q1. Do you run on trails? NA NA
2 YES 97.17% 2507
3 NO 2.83% 73
4 Q2. Do you participate in organized trail work, maintenance, building, or cleaning up trails (ie: plogging)? NA NA
5 YES 49.88% 1283
6 NO 50.12% 1289
問題和可能的回答不盡相同,所以我想象的工作流程是:
理想情況下,最終結果將是:
Q1... YES 10% 435
Q1... NO 90% 783
Q2... YES 10% 435
Q2... NO 90% 783
對不起,我不得不編輯,我終於明白了
將您的工作表保存為 csv 使用,作為分隔符和 ' 作為字符串分隔符。
運行此代碼
請交流任何疑慮或疑問。 請注意,我使用readLines()
將文件作為文本讀取,然后使用冒號字符將它們分開,除了在問題中我使用字符串分隔符的地方。 它很臟,但它可以工作。
最好的
JA
library(data.table)
library(stringr)
dat <- readLines("~/Documents/test.SO/test1.csv")
qlines <- grep("Q[0-9]\\.", dat)
all.questions <- list()
i <- 1
-現在這是甜蜜的東西:按步驟:
dat[q]
執行此操作,因為我們正在循環 q,因為我們已經知道問題所在的行。 請記住,從這一行到下一行都是答案,除非這是最后一個問題,否則從這一行到最后一行都是答案,這就是 if 存在的原因。 子只是在您用來存儲的字段分隔符之間提取,即'unlist(str_split(dat[a], ","))
我們將行分成一個字符向量,每個“,”是字段分隔符。 然后我們有一個字符向量,我們知道它包含如上所述的有序信息。 從這里我們做ans.dat[1]
我們知道是答案本身,然后下一個元素是百分比等等。 我們正在做percent <- ans.dat[2]
的事情,分配給一個變量,只是慢慢地從該文本行中提取信息,所以最后我們可以構建一個包含我們喜歡的元素的表格。內部循環將耗盡此問題的答案 外部循環將耗盡文本的問題。
旁注,我可以通過在內部循環關閉后添加第二個 sub 來消除剩余的冒號: question <- gsub("( |,)$", "", question)
。
for(q in qlines){
question <- sub(".*'([^']*)'.*", "\\1", dat[q]) #S1
if(which(q==qlines) == length(qlines)){
ans.lines <- (q+1):length(dat)
}else{
ans.lines <- (q+1) : (qlines[which(qlines==q)+1] - 1)
}
all.answers <- data.table()
for(a in ans.lines){
ans.dat <- unlist(str_split(dat[a], ",")) #S2
ans <- ans.dat[1]
percent <- ans.dat[2]
responders <- ans.dat[3]
ans.row <- data.table("ans"=ans, "percent"=percent, "responders"=responders) #S3
all.answers <- rbind(all.answers, ans.row)
}
all.questions[[i]] <- question.table <- cbind(question, all.answers)
i <- i+1
}
all.questions
[[1]]
question ans percent responders
1: Q1. Do you run on trails? ,, YES 50 100
2: Q1. Do you run on trails? ,, NO 50 100
[[2]]
question ans percent responders
1: Q2. Do you participate in organized trail work, maintenance, building, or cleaning up trails (ie: plogging)? YES 50 100
2: Q2. Do you participate in organized trail work, maintenance, building, or cleaning up trails (ie: plogging)? NO 50 100
[[3]]
question ans percent responders
1: Q3. What is your gender,, MALE 50 100
2: Q3. What is your gender,, FEMALE 49 99
3: Q3. What is your gender,, OTHER 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.