【问题标题】:R: choosing elements of dataframe by conditionR:按条件选择数据框的元素
【发布时间】:2020-10-18 16:01:45
【问题描述】:

我是 R 新手,我有一些数据的数据框。我有一些条件函数,返回TrueFalse,我想选择数据框的元素,这些元素将包含所有True

frame:
    V1    V2   V3   V4
1:  "abc" 6    4    1b2
2:  kk    wq2 "3 4" 8

例如:

first_func <- function(x) is.digit(x) # will choose all numerics
second_func <- function(x) x > 5 # will choose only numbers > 5

我想选择所有元素&gt; 5,并为它们应用另一个函数,例如

third_function <- function(x) x^2 # for only numbers > 5 get square

我想得到这个结果:

frame:
    V1    V2  V3   V4
1:  "abc" 36  4    1b2
2:  kk    wq "3 4" 64

如何正确使用 R 语法?

【问题讨论】:

  • 您能否分享使用 dput() 和预期输出的可重现示例
  • 能否请您格式化您的示例数据,使用列名和缩进?

标签: r function dataframe


【解决方案1】:

apply() 和一个内置函数试试这个方法:

#Code
myfun <- function(x)
{
  y <- as.numeric(x)
  z <- ifelse(!is.na(y) & y>5,y^2,x)
  return(z)
}
#Apply
Res <- as.data.frame(t(apply(df,1,myfun)))

输出:

Res
   V1  V2  V3  V4
1 abc  36   4 1b2
2  kk wq2 3 4  64

使用的一些数据:

#Data
df <- structure(list(V1 = c("abc", "kk"), V2 = c("6", "wq2"), V3 = c("4", 
"3 4"), V4 = c("1b2", "8")), class = "data.frame", row.names = c(NA, 
-2L))

使用sapply() 可以获得相同的方法:

#Code 2
Res2 <- as.data.frame(sapply(df,myfun))

输出:

Res2
   V1  V2  V3  V4
1 abc  36   4 1b2
2  kk wq2 3 4  64

【讨论】:

  • 如果函数不是那么简单就不行,我需要知道基本如何为任何条件选择值TrueFalse
  • @Angelika 不明白你指的是什么函数,能详细点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2015-07-01
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多