R 基于重复行的子集数据表
我有一个存储在对象R 基于重复行的子集数据表,r,data.table,row,subset,R,Data.table,Row,Subset,我有一个存储在对象ddf中的数据表列表(示例如下所示): 我想对列表ddf进行子集划分,以便结果只包含以下ddf: 每行至少有9行 这9行中的每一行都是相同的 我想存储这个子设置的输出 我已经为此编写了以下代码: for(i in 1:100){ m=(as.numeric(nrow(df[[i]]))>= 9) if(m == TRUE & df[[i]][1,] = df[[i]][2,] = =df[[i]][3,] =df[[i]][4,] =df[[i]][5,
ddf
中的数据表列表(示例如下所示):
我想对列表ddf
进行子集划分,以便结果只包含以下ddf:
for(i in 1:100){
m=(as.numeric(nrow(df[[i]]))>= 9)
if(m == TRUE & df[[i]][1,] = df[[i]][2,] =
=df[[i]][3,] =df[[i]][4,] =df[[i]][5,] =df[[i]][6,]=
df[[i]][7,]=df[[i]][8,]=df[[i]][9,]){
print(df[[i]])
}}
请告诉我出了什么问题&我如何根据“n”个类似行概括子设置的结果
[跟进问题]
Answer obtained from Main question:
> ddf[sapply(ddf, function(x) nrow(x) >= n & nrow(unique(x)) == 1)]
$`61`
V1 V2 V3
1: a c b
2: a c b
3: a c b
4: a c b
5: a c b
6: a c b
7: a c b
$`68`
V1 V2 V3
1: a c a
2: a c a
3: a c a
4: a c a
5: a c a
6: a c a
7: a c a
8: a c a
$`91`
V1 V2 V3
1: b c a
2: b c a
3: b c a
4: b c a
5: b c a
6: b c a
7: b c a
..... till the last data.frame which meet the row matching criteria (of at least 9 similar rows)
There are only 2 types of elements in the list:
**[[.. ]]**
**Case 1.** >70% accuracy
**Case 2.** <70% accuracy
主要问题的答案:
>ddf[sapply(ddf,函数(x)nrow(x)>=n&nrow(唯一(x))=1]
$`61`
V1 V2 V3
1:a、c、b
2:a、c、b
3:a、c、b
4:a、c、b
5:a、c、b
6:a、c、b
7:a、c、b
$`68`
V1 V2 V3
1:a-c-a
2:a-c-a
3:a-c-a
4:a-c-a
5:a-c-a
6:a-c-a
7:a-c-a
8:a-c-a
$`91`
V1 V2 V3
1:bca
2:b-c-a
3:b-c-a
4:b-c-a
5:bca
6:bca
7:b-c-a
..... 直到满足行匹配标准的最后一个data.frame(至少9个类似行)
列表中只有两种类型的元素:
**[[.. ]]**
**案例1.*>70%的准确度
**案例2.*我们可以在列表中循环('ddf'),只将重复的
行与(重复的
)子集,对数据集进行排序,如果数据集'x1'的行数大于8,则得到前9行(头(x1,9)
)或else
返回打印的“坏结果”
lapply(ddf, function(x) {
x1 <- x[duplicated(x)|duplicated(x, fromLast=TRUE)]
if(nrow(x1)>9) {
x1[order(V1, V2, V3), head(.SD, 9)]
} else "bad answer"
})
#[[1]]
# V1 V2 V3
#1: b c a
#2: b c a
#3: b c a
#4: b c a
#5: b c a
#6: b c a
#7: b c a
#8: b c a
#9: b c a
#[[2]]
#[1] "bad answer"
#[[3]]
#[1] "bad answer"
lappy(ddf,函数(x){
x1(9){
x1[顺序(V1,V2,V3),头部(.SD,9)]
}否则就是“坏答案”
})
#[[1]]
#V1 V2 V3
#1:bca
#2:b-c-a
#3:b-c-a
#4:b-c-a
#5:bca
#6:bca
#7:b-c-a
#8:bca
#9:bca
#[[2]]
#[1] “回答不好”
#[[3]]
#[1] “回答不好”
数据
ddf我们可以在列表中循环('ddf'),只将duplicate
行与(duplicated
)一起子集,对数据集进行排序,如果数据集'x1'的行数大于8,则得到前9行(头(x1,9)
)或else
返回打印的“坏结果”
lapply(ddf, function(x) {
x1 <- x[duplicated(x)|duplicated(x, fromLast=TRUE)]
if(nrow(x1)>9) {
x1[order(V1, V2, V3), head(.SD, 9)]
} else "bad answer"
})
#[[1]]
# V1 V2 V3
#1: b c a
#2: b c a
#3: b c a
#4: b c a
#5: b c a
#6: b c a
#7: b c a
#8: b c a
#9: b c a
#[[2]]
#[1] "bad answer"
#[[3]]
#[1] "bad answer"
lappy(ddf,函数(x){
x1(9){
x1[顺序(V1,V2,V3),头部(.SD,9)]
}否则就是“坏答案”
})
#[[1]]
#V1 V2 V3
#1:bca
#2:b-c-a
#3:b-c-a
#4:b-c-a
#5:bca
#6:bca
#7:b-c-a
#8:bca
#9:bca
#[[2]]
#[1] “回答不好”
#[[3]]
#[1] “回答不好”
数据
ddf当ddf
是您的数据表列表时,则:
ddf[sapply(ddf, nrow) >= 9 & sapply(ddf, function(x) nrow(unique(x))) == 1]
应该会给你想要的结果
其中:
sapply(ddf,nrow)>=9
检查数据表是否有九行或更多行
sapply(ddf,函数(x)nrow(unique(x))==1
检查所有行是否相同
或者使用@docendodiscimus建议的一个sapply
调用:
ddf[sapply(ddf, function(x) nrow(x) >= 9 & nrow(unique(x)) == 1)]
或者使用.N
特殊符号和数据的uniqueN
功能。表
:
ddf[sapply(ddf, function(x) x[,.N] >= 9 & uniqueN(x) == 1)]
另一种选择是使用过滤器(根据@Frank在评论中的建议):
获取数据表编号的两种方法:
1.使用哪个
:
which(sapply(ddf, function(x) nrow(x) >= 9 & nrow(unique(x)) == 1))
2.为列表中的数据表指定名称:
names(ddf) <- paste0('dt', 1:length(ddf))
当ddf
是您的数据表列表时,则:
ddf[sapply(ddf, nrow) >= 9 & sapply(ddf, function(x) nrow(unique(x))) == 1]
应该会给你想要的结果
其中:
sapply(ddf,nrow)>=9
检查数据表是否有九行或更多行
sapply(ddf,函数(x)nrow(unique(x))==1
检查所有行是否相同
或者使用@docendodiscimus建议的一个sapply
调用:
ddf[sapply(ddf, function(x) nrow(x) >= 9 & nrow(unique(x)) == 1)]
或者使用.N
特殊符号和数据的uniqueN
功能。表
:
ddf[sapply(ddf, function(x) x[,.N] >= 9 & uniqueN(x) == 1)]
另一种选择是使用过滤器(根据@Frank在评论中的建议):
获取数据表编号的两种方法:
1.使用哪个
:
which(sapply(ddf, function(x) nrow(x) >= 9 & nrow(unique(x)) == 1))
2.为列表中的数据表指定名称:
names(ddf) <- paste0('dt', 1:length(ddf))
请阅读有关如何完成任务的信息。现在更好了吗?理想情况下,我们可以将您的所有代码复制/粘贴到R中并开始修补。您提供的数据并不完全适合导入。请参阅Jaap提供的关于如何轻松共享(模拟)数据的链接。请阅读关于如何给出一个完整答案的信息。现在更好了吗?理想情况下,我们可以将您的所有代码复制/粘贴到R中并开始修补。您提供的数据并不完全适合导入。请参阅Jaap提供的关于如何轻松共享(模拟)数据的链接。我得到一个函数错误:第二个参数必须是listfunction(what,args,quote=FALSE,envir=parent.frame()){if(!is.list(args))stop(“第二个参数必须是列表”)if(quote)args@Rishi纠正了错误problem@arun我得到的子集的答案不正确,我得到的是一个data.table outputs,而我应该得到两个yes@akrun谢谢我得到一个函数错误:第二个参数必须是listfunction(what,args,quote=FALSE,envir=parent.frame()){if(!is.list(args))stop(“第二个参数必须是列表”)如果(引用)args@Rishi纠正了错误problem@arun我得到的子集答案不正确,我得到的是一个数据表输出,而我应该得到两个是@akrun谢谢你不能同时签入一个sapply
call?@Jaap-我需要数据表编号显示在输出中..例如lst[[11]…,lst[[15]],假设他们符合subsetting@Jaap-我需要一个列表输出::对于不准确的结果,我得到“<70%的准确度”。对于正确的输出,我得到datatable