我有一个变量X,其中包含一个十进制值。我想编写一些IF条件以将X匹配到数据帧。
说我有X = 1.1和一个称为OutputDF的数据框,如下所示。
OutputDF
score ID
1 32 1.2
2 35 1.3
3 20 2.1
4 15 3.2
我想写一些对小数有效的IF条件。
我想就此输出包含3个条件。
C1。如果1.x是唯一元素,则打印YES。 在上面的输出中,我们可以看到1.x不是唯一的元素。还有2.x和3.x。
C2。如果1.x不是唯一元素,但1.x具有最高分数,则打印YES。 在示例中,我们可以看到1.x包含最高分,因此这次是肯定的。
C3。如果1.x不是唯一的元素,但是1.x出现的频率最高,是。 在样本中,我们可以看到1.x相对于其他元素出现了2次,因此它是肯定的。
所以我对上述示例的预期输出是
ID C1 C2 C3
1.1 NO YES YES
答案 0 :(得分:1)
使用Base R,请找到答案
df <- read.table(text=" score ID
1 32 1.2
2 35 1.3
3 20 2.1
4 15 3.2 ",header= T)
答案:-
df$c1 <- ifelse(length(unique(substr(df$ID,1,1))) == 1,"Yes","No")
df$c2 <- ifelse((substr(df$ID,3,3)) == max(substr(df$ID,3,3)),"Yes","No")
# Create the function as Mode is not directly available in R ##
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
df$c3 <- ifelse(substr(df$ID,1,1) == getmode(substr(df$ID,1,1)),"Yes","No")
result <- structure(list(score = c(32L, 35L, 20L, 15L), ID = c(1.2, 1.3,
2.1, 3.2), c1 = c("No", "No", "No", "No"), c2 = c("No", "Yes",
"No", "No"), c3 = c("Yes", "Yes", "No", "No")), row.names = c("1",
"2", "3", "4"), class = "data.frame")
答案 1 :(得分:1)
一种获取任何十进制值和任何包含带有值的变量score
和带有十进制值的变量ID
的数据帧的预期输出的功能方法:
FOO <- function(x, df){
data.frame(ID = x,
C1 = ifelse(all(trunc(df$ID) %in% trunc(x)), "YES", "NO"),
C2 = ifelse(max(df$score[trunc(df$ID) %in% trunc(x)]) == max(df$score), "YES", "NO"),
C3 = ifelse(which.max(table(trunc(df$ID))) == trunc(x), "YES", "NO"))
}
示例:
df <- data.frame(score = c(32,35,20,15),
ID = c(1.2,1.3,2.1,3.2))
FOO(1.1, df)
ID C1 C2 C3
1 1.1 NO YES YES
答案 2 :(得分:0)
这应该做
X <- c(1.1,1.2,2.4,3.5)
score<-c(5,4,3,2)
if(all(floor(X) ==1)) {
print('yes')
} else{
print('no' )}
if(any(score[floor(X)==1]==max(score))){
print('yes')
} else{
print('no' )}
if(as.numeric(names(table(floor(X)))[which(table(floor(X)) == max(table(floor(X)))) ])
==1){
print('yes')
} else{
print('no' )}