这是一个名为newdf的示例数据框。 AA,AB,AC等是rownames:
value c1 c2 c3 c4
AA 0.875 0.750 0.750 0.625 1.000
AB 1.000 1.000 0.812 0.562 0.375
AC 0.625 0.812 0.667 0.812 0.750
AD 0.375 0.625 0.938 NA 0.875
AE NA 0.500 0.542 0.938 0.500
BA 1.000 0.958 0.875 0.875 1.000
BB 0.875 0.938 0.812 1.000 0.562
BC 0.750 0.708 0.750 NA 0.500
BD 0.500 0.333 0.750 NA 0.625
BE NA 0.208 0.500 NA 0.250
CA NA 0.938 1.000 0.562 NA
CB NA NA NA 0.938 0.812
CC 1.000 1.000 0.750 1.000 1.000
CD 0.938 0.812 NA NA NA
CE NA 0.688 0.875 NA 0.938
DA NA NA 0.625 1.000 NA
DB NA NA 1.000 0.375 0.625
DC NA NA 0.750 0.625 1.000
DD NA NA NA NA NA
DE NA 1.000 0.500 0.750 0.750
EA 1.000 NA NA 0.375 NA
EB 0.875 NA NA 0.750 1.000
EC 0.250 NA 1.000 1.000 NA
ED 0.000 NA NA NA NA
EE NA NA NA NA NA
我希望在行上使用apply。如果我的函数参数一致,我知道如何做到这一点非常简单。
例如,我想知道c1,c2,c3,c4有多少次> 0.9,我会按行执行此操作:
z<-newdf[-1]
apply(z, 1, function(x) sum(x >= 0.9, na.rm=T)) #how many columns are >= 0.9
#AA AB AC AD AE BA BB BC BD BE CA CB CC CD CE DA DB DC DD DE EA EB EC ED EE
# 1 1 0 1 1 2 2 0 0 0 2 1 3 0 1 1 1 1 0 1 0 1 2 0 0
但是,我真正想知道的是,c1以后的列数大于newdf的第一个变量/列中存储的值。我试过这个,它返回垃圾:
value<-newdf[,1]
apply(z, 1, function(x) sum(x >= value, na.rm=T)) #how many columns are >= value
我尝试将额外的参数传递给函数,类似于应用帮助页面但是没有正确使用它。
示例数据:
newdf<-structure(list(value = structure(c(0.875, 1, 0.625, 0.375, NA,
1, 0.875, 0.75, 0.5, NA, NA, NA, 1, 0.938, NA, NA, NA, NA, NA,
NA, 1, 0.875, 0.25, 0, NA), .Dim = 25L, .Dimnames = list(c("AA",
"AB", "AC", "AD", NA, "BA", "BB", "BC", "BD", NA, NA, NA, "CC",
"CD", NA, NA, NA, NA, NA, NA, "EA", "EB", "EC", "ED", NA))),
c1 = structure(c(0.75, 1, 0.812, 0.625, 0.5, 0.958, 0.938,
0.708, 0.333, 0.208, 0.938, NA, 1, 0.812, 0.688, NA, NA,
NA, NA, 1, NA, NA, NA, NA, NA), .Dim = 25L, .Dimnames = list(
c("AA", "AB", "AC", "AD", "AE", "BA", "BB", "BC", "BD",
"BE", "CA", NA, "CC", "CD", "CE", NA, NA, NA, NA, "DE",
NA, NA, NA, NA, NA))), c2 = structure(c(0.75, 0.812,
0.667, 0.938, 0.542, 0.875, 0.812, 0.75, 0.75, 0.5, 1, NA,
0.75, NA, 0.875, 0.625, 1, 0.75, NA, 0.5, NA, NA, 1, NA,
NA), .Dim = 25L, .Dimnames = list(c("AA", "AB", "AC", "AD",
"AE", "BA", "BB", "BC", "BD", "BE", "CA", NA, "CC", NA, "CE",
"DA", "DB", "DC", NA, "DE", NA, NA, "EC", NA, NA))), c3 = structure(c(0.625,
0.562, 0.812, NA, 0.938, 0.875, 1, NA, NA, NA, 0.562, 0.938,
1, NA, NA, 1, 0.375, 0.625, NA, 0.75, 0.375, 0.75, 1, NA,
NA), .Dim = 25L, .Dimnames = list(c("AA", "AB", "AC", NA,
"AE", "BA", "BB", NA, NA, NA, "CA", "CB", "CC", NA, NA, "DA",
"DB", "DC", NA, "DE", "EA", "EB", "EC", NA, NA))), c4 = structure(c(1,
0.375, 0.75, 0.875, 0.5, 1, 0.562, 0.5, 0.625, 0.25, NA,
0.812, 1, NA, 0.938, NA, 0.625, 1, NA, 0.75, NA, 1, NA, NA,
NA), .Dim = 25L, .Dimnames = list(c("AA", "AB", "AC", "AD",
"AE", "BA", "BB", "BC", "BD", "BE", NA, "CB", "CC", NA, "CE",
NA, "DB", "DC", NA, "DE", NA, "EB", NA, NA, NA)))), .Names = c("value",
"c1", "c2", "c3", "c4"), class = "data.frame", row.names = c("AA",
"AB", "AC", "AD", "AE", "BA", "BB", "BC", "BD", "BE", "CA", "CB",
"CC", "CD", "CE", "DA", "DB", "DC", "DD", "DE", "EA", "EB", "EC",
"ED", "EE"))
答案 0 :(得分:1)
使用像
这样的东西会更有效率apply
虽然此处rowSums(newdf[,-1]>=newdf[, 1], na.rm=T)
会将na.rm=T
的行变为0.要将这些行返回value==NULL
,您可以
NA
获取
rr<-rowSums(newdf[,-1]>=newdf[, 1], na.rm=T)
is.na(rr)<-is.na(newdf[,1])
rr
答案 1 :(得分:0)
当您在功能中使用申请时,&#39; x&#39;是行中元素的列表,所以,
> newdf
value c1 c2 c3 c4
AA 0.875 0.750 0.750 0.625 1.000
AB 1.000 1.000 0.812 0.562 0.375
AC 0.625 0.812 0.667 0.812 0.750
AD 0.375 0.625 0.938 NA 0.875
AE NA 0.500 0.542 0.938 0.500
BA 1.000 0.958 0.875 0.875 1.000
BB 0.875 0.938 0.812 1.000 0.562
BC 0.750 0.708 0.750 NA 0.500
BD 0.500 0.333 0.750 NA 0.625
BE NA 0.208 0.500 NA 0.250
CA NA 0.938 1.000 0.562 NA
CB NA NA NA 0.938 0.812
CC 1.000 1.000 0.750 1.000 1.000
CD 0.938 0.812 NA NA NA
CE NA 0.688 0.875 NA 0.938
DA NA NA 0.625 1.000 NA
DB NA NA 1.000 0.375 0.625
DC NA NA 0.750 0.625 1.000
DD NA NA NA NA NA
DE NA 1.000 0.500 0.750 0.750
EA 1.000 NA NA 0.375 NA
EB 0.875 NA NA 0.750 1.000
EC 0.250 NA 1.000 1.000 NA
ED 0.000 NA NA NA NA
EE NA NA NA NA NA
> apply(newdf,1,function(x) sum(x[-1] >= x[1],na.rm=T)) # the -1 removes the first element from the sum, and the x[1] is the value of the first element in the row
AA AB AC AD AE BA BB BC BD BE CA CB CC CD CE DA DB DC DD DE EA EB EC ED EE
1 1 4 3 0 1 2 1 2 0 0 0 3 0 0 0 0 0 0 0 0 1 2 0