Как я могу добавить некоторые операторы IF с десятичными переменными? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть переменная 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 встречается чаще всего, выведите YES.В примере мы видим, что 1.x встречается 2 раза по сравнению с другими элементами, так что это да.

Таким образом, мой ожидаемый результат для приведенного выше образца

ID  C1   C2   C3
1.1 NO   YES  YES

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Используя 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")
0 голосов
/ 13 февраля 2019

Функциональный подход для получения ожидаемого результата при любом десятичном значении и любом кадре данных, содержащем переменную 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
0 голосов
/ 13 февраля 2019

Это должно сделать это

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' )}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...