如何添加带有十进制变量的IF语句?

时间:2019-02-13 06:31:18

标签: r if-statement

我有一个变量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

3 个答案:

答案 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' )}