R中数据框中的楼层值

时间:2014-05-24 13:37:40

标签: r floor

您好我想在我的dat数据框中建立一个最小值(0.3):

col1   col2  col3  col4 
 0     0.2    0.8    1
 0.2    0     0.7   2.1
13.2   12.1   1.58   0

我的预期输出:

 col1   col2  col3  col4 
 0.3     0.3   0.8    1
 0.3     0.3   0.7   2.1
 13.2   12.1  1.58   0.3

干杯!

2 个答案:

答案 0 :(得分:3)

好醇'矢量化在这里是最好的。由于我们没有factorcharacter列,因此我们可以将dat视为matrix并直接替换这些值。

## dat <- read.table(h=T, text = 'col1   col2  col3  col4 
##  0     0.2    0.8    1
##  0.2    0     0.7   2.1
##  13.2   12.1   1.58   0')

> min <- 0.3
> dat[dat < min] <- min
> dat
##   col1 col2 col3 col4
## 1  0.3  0.3 0.80  1.0
## 2  0.3  0.3 0.70  2.1
## 3 13.2 12.1 1.58  0.3

答案 1 :(得分:1)

您可以使用lapply执行此操作

dat[] <- lapply(dat, function(x) ifelse(x<0.3, 0.3, x))

> dat
  col1 col2 col3 col4
1  0.3  0.3 0.80  1.0
2  0.3  0.3 0.70  2.1
3 13.2 12.1 1.58  0.3

使用dat[]代替dat,您可以保留现有data.frame的类和结构。否则,dat将是一个列表,因为lapply会返回一个列表。

如果您执行包含其他包含factorscharacter条目的列,您仍然可以使用lapply并指定要更改的列。如果您有以下data.frame:

> dat
  col1 col2 col3 col4 id
1  0.0  0.2 0.80  1.0  a
2  0.2  0.0 0.70  2.1  b
3 13.2 12.1 1.58  0.0  c

您可以按如下方式使用lapply

> dat[1:4] <- lapply(dat[1:4], function(x) ifelse(x<0.3, 0.3, x)) #only columns 1:4 will be changed

> dat                           #the id column is as it was and you still have a data.frame
  col1 col2 col3 col4 id
1  0.3  0.3 0.80  1.0  a
2  0.3  0.3 0.70  2.1  b
3 13.2 12.1 1.58  0.3  c