Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在新列中获取所有NAs[变异]_R_Dplyr_Na_Missing Data - Fatal编程技术网

R 在新列中获取所有NAs[变异]

R 在新列中获取所有NAs[变异],r,dplyr,na,missing-data,R,Dplyr,Na,Missing Data,我需要创建一个新列,它是两个或三个其他列的函数,其中一个包含一些丢失的数据(NAs)。但是,当我使用dplyr的mutate函数时,新列包含所有NAs 请参见下面的示例: rand_df <- data.frame(replicate(10,sample(0:10,200,rep=TRUE))) # random df names(rand_df) <- letters[seq(from=1, to=10)] #renaming header rand_df$c[2:20] <

我需要创建一个新列,它是两个或三个其他列的函数,其中一个包含一些丢失的数据(NAs)。但是,当我使用
dplyr
mutate
函数时,新列包含所有NAs

请参见下面的示例:

rand_df <- data.frame(replicate(10,sample(0:10,200,rep=TRUE))) # random df
names(rand_df) <- letters[seq(from=1, to=10)]  #renaming header
rand_df$c[2:20] <- NA  # introducing NAs
head(rand_df)

 a b  c d  e f  g h i j
1  3 1  8 2  4 3  1 9 2 9
2  6 1 NA 1  2 8  8 6 0 9
3  5 7 NA 2  4 1  7 7 3 0
4 10 8 NA 6  6 7  0 2 2 0
5  4 1 NA 9  3 8  2 2 5 2
6 10 8 NA 3 10 2 10 4 5 5
rand_df您可以使用pmin()

库(dplyr)
兰德迪夫2 7 3 NA 2 5 9 1 2 10 6
#>303NA45610106
#>407NA 5366947
#>5 4 4 NA 5 4 10 8 5 6 0
#>613NA30101374
rand_df%突变(k=141*pmin((c/88.42),1))
头部(兰特迪夫)
#>a b c d e f g h i j k
#> 1 4 9  9 6 10  2 1 10 10 10 14.35196
#>2 7 3 NA 2 5 9 1 2 10 6 NA
#>3003NA 45610106NA
#>407NA 5366947NA
#>5 4 4 NA 5 4 10 8 5 6 0 NA
#>613NA 30101374NA
由[reprex软件包]于2020-08-17创建(https://reprex.tidyverse.org)(v0.3.0)

似乎在
ifelse()函数中添加了额外的参数。我的意思是
33.5
在这里是不必要的


另外,下一次,请确保正确询问(根据本指南)

以下代码行失败,因为
min((c/88.42),1))
不基于每一行进行计算,而是使用整个列,因此重复相同的值:

rand_df <- rand_df %>% mutate(k = 141 * min((c/88.42), 1))
解决此问题的方法有多种,其中一种是将行号添加为列,然后使用group_by:

rand_df  %>% 
  mutate(row = row_number()) %>% 
  group_by(row) %>% 
  mutate(k = 141 * min((c/88.42), 1))

谢谢。我用一个可复制的例子编辑了这个问题。我希望现在更清楚了。非常感谢。我对问题进行了编辑以使其更清晰。@janderkran,我用OP提供的新数据集编辑了您的答案,看起来很正确。对于OP,问题+相关数据越精确,获得快速答案的机会就越大。在新版本的
dplyr
rowwise()
不用耍花招就能做到这一点。我还以为他们已经放弃了呢?不管怎样,你每天都会学到一些新的东西……我想他们几年前试图摆脱它,但它得到了一些新的爱(而且可能做得更好并不容易),所以它实际上在dplyr 1.0中得到了推广。最近的观点见此:@RobertWilson非常感谢您的澄清。我的实际目标是简单地找到最小的b/w
c/88.42
和1,我认为
pmin
就是这样做的。我之前不明白@janderkran的回答,但现在我明白了。
rand_df <- rand_df %>% mutate(k = 141 * min((c/88.42), 1))
rand_df %>% mutate(k = min(f), k1 = max(f))) 
rand_df  %>% 
  mutate(row = row_number()) %>% 
  group_by(row) %>% 
  mutate(k = 141 * min((c/88.42), 1))