我正在尝试对在单列中有差异的重复观察进行子集化。在这个例子中,我尝试使用相同的id号但不同的标签号来对观察进行子集化。我打算制作自己的函数,然后使用lapply函数来浏览我的数据集。
截至目前,我的代码如下:
test.function <- (i) {
if(test.data[i, "id"] == test.data[i-1, "id"] &
test.data[i, "tag.num"] != test.data[i-1, "tag.num"]){
id.tag <- subset(i)
}
}
lapply (test.data, test.function)
关于上述陈述,我有几个问题。最重要的是,我一直在接受:
Error: unexpected '{' in "test.data <- (i) {"
我真的不确定为什么会一直这样,任何指导都会受到赞赏。
当前数据集看起来像(999只是缺失值指示符):
id tag.num
1000 999
1000 A49038483
1100 999
1100 A49294883
1200 999
1200 999
再一次,我只想尝试使用不同的标签号对相同的id进行子集化。在这个例子中,我试图对id为1000和1100的4个观察进行子集。
另外,我想知道if语句中的语法,是否有必要指定我的数据集名称。我希望在原始数据集中的几个不同列上应用此功能。如果有一种更通用的方法可以设置它,然后能够为所有适用的列运行lapply函数,那将是很好的知识。任何和所有的帮助表示赞赏。
答案 0 :(得分:1)
就错误而言,您错过了function
和)
:
test.function <- function(i) {
if(test.data[i, "id"] == test.data[i-1, "id"] &
test.data[i, "tag.num"] != test.data[i-1, "tag.num"]){
id.tag <- subset(i)
}
}
运行没有任何错误。
答案 1 :(得分:0)
要在R中定义函数,语法为
fun.name <- function(args) {...}
所以你需要function(i)
,而你上面只有(i)
。
我还建议,如果您在数据集的各行中尝试lapply
,则可能不需要这样做。
我不清楚你要做什么。您可以发布一个数据样本以及您希望得到的内容吗?