我已经采用了一组文本,并将其拆分为我关注的6个元素('标题','已发布',' authors', ' country',' journal',' url')。每个引文应该包含其中的每一个,但缺少数据。我分配了一个' varnum'变量到每个元素,所以我可以通过它们找出我缺少值的位置。我计划创建一个引用变量(' citenum')并循环(或lapply),并且只在“citenum”中创建一个变化'当有一个从预期的转变。我决定创建两个变量' con'和' prev_con'所以我可以做一些简单的数学运算来确定何时应该有一个增量(一个)用于' citenum'。最终,我想创建一个矩阵来显示每个引文的缺失值。如果你可以帮助循环或lapply ...我会很感激。
citation <- as.data.frame(cbind(prev_con, con, citenum, varnum))
library(data.table)
citationDT <- as.data.table(citation)
citationDT <- citationDT[, prev_con := shift(con)]
citation <- as.data.frame(citationDT)
citation[1,1] <- 99
head(citation, 20)
prev_con con citenum varnum
99 11 0 1
11 12 0 2
12 14 0 4
14 10 0 0
10 10 0 0
10 16 0 6
16 16 0 6
11 11 0 1
12 12 0 2
&#39; con&#39;通过在“varnum”中添加10来创建变量。所以我可以更容易地找到我需要将Citenum增加到下一个级别的地方。使用data.table创建Prevcon以转换到先前的con结果。
这是我尝试过的 - 最终使得citenum等于最终行号6244。
for (i in 1:length(citation$citenum)){
if (citation$con[i] <= citation$prev_con) {
citation$citenum <- citation$citenum[i] + 1
} else {citation$citenum <- citation$citenum[i]
}
}
提前感谢您的帮助。
---从原始提交编辑----
我希望得到以下内容:
prev_con con citenum varnum
1 99 11 1 1
2 11 12 1 2
3 12 14 1 4
4 14 10 2 0
5 10 10 3 0
6 10 16 3 6
7 16 16 4 6
8 16 11 5 1
9 11 12 5 2
10 12 13 5 3
答案 0 :(得分:0)
您忘记在for循环的几个位置编入索引。希望这能为您解决这个问题。
for (i in 1:nrow(citation)){
if (citation$con[i] <= citation$prev_con[i]) {
if (i==1) citation$citenum[i] <- 1
else citation$citenum[i] <- citation$citenum[i-1] + 1
}
else {
citation$citenum[i] <- citation$citenum[i-1]
}
}
编辑:另外,我们需要添加到前一行的元素,即i-1的位置.if(i == 1)是一个极端情况,因为没有i = 0。< / p>