R 添加零数据-递归循环?
背景: 我有一个由计数数据组成的数据框,即从数字图像“条形码”中计数的昆虫若虫的数量。 每个条形码应有两个数字/计数“NymphCounts”,两级“状态”活动“a”和死亡“d”各一个数字 问题: 对于state=dead或alive,并不总是输入“zero”计数数据。我想添加缺少的zero数据。 如何检查每个条形码出现两次,如果条形码编号出现一次,则仅复制条形码(观察)和所有其他变量(除了添加零“Nymph count”),但确保“State”变量与原始观察中记录的状态相反 通常,我可以从其他帖子中找到大多数解决方案。虽然很多帖子都很接近,但我似乎无法解决以下问题 样本数据:R 添加零数据-递归循环?,r,for-loop,recursion,dataframe,R,For Loop,Recursion,Dataframe,背景: 我有一个由计数数据组成的数据框,即从数字图像“条形码”中计数的昆虫若虫的数量。 每个条形码应有两个数字/计数“NymphCounts”,两级“状态”活动“a”和死亡“d”各一个数字 问题: 对于state=dead或alive,并不总是输入“zero”计数数据。我想添加缺少的zero数据。 如何检查每个条形码出现两次,如果条形码编号出现一次,则仅复制条形码(观察)和所有其他变量(除了添加零“Nymph count”),但确保“State”变量与原始观察中记录的状态相反 通常,我可以从其他
dput(sampleData)
structure(list(Barcode = structure(c(1L, 1L, 2L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 9L, 10L, 10L, 11L, 11L), .Label = c("10308",
"10309", "10310", "10326", "10327", "10328", "10329", "10330",
"10331", "10332", "10335"), class = "factor"), Trip = c(1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Source =
structure(c(1L,
1L, 2L, 2L, 11L, 3L, 4L, 5L, 6L, 7L, 8L, 8L, 9L, 9L, 10L, 10L
), .Label = c("P8030265.JPG", "P8030266.JPG", "P8040342.JPG",
"P8040343.JPG", "P8040344.JPG", "P8040345.JPG", "P8040346.JPG",
"P8040347.JPG", "P8040348.JPG", "P8040349.JPG", "P8040359.JPG"
), class = "factor"), NymphCounts = c(1L, 1L, 1L, 5L, 7L, 2L,
16L, 1L, 1L, 1L, 4L, 10L, 2L, 1L, 3L, 3L), ND.T = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "N/A",
class = "factor"),
ND.Z = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = "N/A", class = "factor"),
ND.M = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = "N/A", class = "factor"),
Phone = structure(c(2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = c("M ", "T"), class = "factor"),
State = structure(c(1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 2L, 1L, 2L), .Label = c("a", "d"), class = "factor")), .Names =
c("Barcode",
"Trip", "Source", "NymphCounts", "ND.T", "ND.Z", "ND.M", "Phone",
"State"), row.names = c(NA, -16L), class = "data.frame")
寻找类似的问题,在一些帮助下,我尝试了这个
sampled<-sampleData
str(sampled)
for(i in levels(sampled[,1])){
if (sum(sampled[,1]==i)==1){
temp <-sampled[which(sampled[,1]==i),]
if(temp$State=="a") temp$State="d"
if(temp$State=="d") temp$State="a"
temp$NymphCounts=0
sampled <- rbind(sampled,temp)
}
}
write.csv(sampled,"R:/Leo/CWF DATA/sampledcor.csv")
sampledcor<-read.csv("R:/Leo/CWF DATA/sampledcor.csv", header = TRUE, sep =
",")
但是,如果当前状态为a
活动,则代码复制条形码添加零
计数,但也复制状态,而不是将其更改为d
不太好
7 7 10327 1 P8040343.JPG 16 N/A N/A N/A M a
19 71 10327 1 P8040343.JPG 0 N/A N/A N/A M a
如果您能告诉我如何更正代码,使添加的观察结果得到零计数,同时也得到适当的状态,我将不胜感激。
我还得到了一个额外的列变量“X”,有什么方法可以控制它吗?
提前感谢在编辑文章时,您可以使用文本框上方的
{}
,以更可读的格式放置数据和代码。只需选择块并单击该图标。当只有一次读取“Narcode”且状态为“d”时,是否要将“NymphCounts”中的值更改为“0”?我不确定我是否理解预期的输出。感谢编辑提示lmoThanks Juan Bosco,我想检查每个条形码(观察)是否出现两次。如果条形码只出现一次,我想复制观察结果,但若虫计数除外,我想用零替换它,并记录与初始状态相反的状态。所以我最终得到了两个相同的条形码观察结果,一个是死亡的若虫数量,另一个是活着的若虫数量。希望这有帮助。
7 7 10327 1 P8040343.JPG 16 N/A N/A N/A M a
19 71 10327 1 P8040343.JPG 0 N/A N/A N/A M a