用R中的另一个值替换多列数据帧中的数字的出现次数

Hen*_*ndy 22 indexing replace r

ETA:顺便说一下,下面的要点是不必迭代我的整个列向量集,以防万一这是一个提议的解决方案(只做已知的工作一次一次).


有很多例子可以将R中数据帧的单个向量中的值替换为其他值.

以及如何NA用其他东西替换所有值:

我正在寻找的是类似于最后一个问题,但基本上试图用另一个值替换一个值.对于多列满足条件的情况生成映射到我的实际数据帧的逻辑值的数据帧,或者只是尝试从多个列的前两个问题执行操作,我遇到了问题.

一个例子:

data <- data.frame(name = rep(letters[1:3], each = 3), var1 = rep(1:9), var2 = rep(3:5, each = 3))

data
  name var1 var2
1    a    1    3
2    a    2    3
3    a    3    3
4    b    4    4
5    b    5    4
6    b    6    4
7    c    7    5
8    c    8    5
9    c    9    5
Run Code Online (Sandbox Code Playgroud)

假设我要将所有的值,4var1var210.

我确信这是基本的,我只是没有正确地思考它.我一直在尝试这样的事情:

data[data[, 2:3] == 4, ]
Run Code Online (Sandbox Code Playgroud)

这不起作用,但如果我做同样data[, 2]data[, 2:3]事情而不是,事情就好了.似乎逻辑测试(如is.na())在多行/列上工作,但数值比较不是很好吗?

谢谢你的任何建议!

Ant*_*ico 54

您希望在整个数据框中搜索与您尝试替换的值匹配的任何值.与运行逻辑测试的方式相同,例如用10替换所有缺失值.

data[ is.na( data ) ] <- 10
Run Code Online (Sandbox Code Playgroud)

你也可以用10s替换所有的4s.

data[ data == 4 ] <- 10
Run Code Online (Sandbox Code Playgroud)

至少我认为那就是你所追求的?

让我们说你想忽略第一行(因为它是所有字母)

# identify which columns contain the values you might want to replace
data[ , 2:3 ]

# subset it with extended bracketing..
data[ , 2:3 ][ data[ , 2:3 ] == 4 ]
# ..those were the values you're going to replace

# now overwrite 'em with tens
data[ , 2:3 ][ data[ , 2:3 ] == 4 ] <- 10

# look at the final data
data
Run Code Online (Sandbox Code Playgroud)

  • 他们只有两分钟;)onetorials.com是一个愚蠢的名字:P (5认同)

liu*_*hao 5

基本上data[, 2:3]==4给你的索引data[,2:3]代替data:

R > data[, 2:3] ==4
       var1  var2
 [1,] FALSE FALSE
 [2,] FALSE FALSE
 [3,] FALSE FALSE
 [4,]  TRUE  TRUE
 [5,] FALSE  TRUE
 [6,] FALSE  TRUE
 [7,] FALSE FALSE
 [8,] FALSE FALSE
 [9,] FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

所以你可以试试这个:

R > data[,2:3][data[, 2:3] ==4]
[1] 4 4 4 4
Run Code Online (Sandbox Code Playgroud)