您好我想在我的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
干杯!
答案 0 :(得分:3)
好醇'矢量化在这里是最好的。由于我们没有factor
或character
列,因此我们可以将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
会返回一个列表。
如果您执行包含其他包含factors
或character
条目的列,您仍然可以使用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