Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 基于可变条件向数据帧添加假数据_R_If Statement_Dataframe - Fatal编程技术网

R 基于可变条件向数据帧添加假数据

R 基于可变条件向数据帧添加假数据,r,if-statement,dataframe,R,If Statement,Dataframe,下午好 每当一个特定变量缺少几个给定的间隔时,我必须向数据帧添加虚拟数据 require(plyr) df <- data.frame(length = c(1.5e+07, 2.5e+07), grade = c(1000, 1000), company = "TEST") for(x in df$length){ if (x<=0|x>1e+07) { df <- rbind.fill(df, data.frame(length = c(5000000), grade

下午好

每当一个特定变量缺少几个给定的间隔时,我必须向数据帧添加虚拟数据

require(plyr)
df <- data.frame(length = c(1.5e+07, 2.5e+07), grade = c(1000, 1000), company = "TEST")
for(x in df$length){
if (x<=0|x>1e+07) {
df <- rbind.fill(df, data.frame(length = c(5000000), grade = c(1000)))
}
require(plyr)

df您可以使用
dplyr
tidyr
来完成

首先,缩短df$长度:

df <- data.frame(length = c(1.5e+07, 2.5e+07), grade = c(1000, 1000), company = "TEST")
df$length <- cut(df$length, breaks = seq(0, 1e+08, 1e+07))

您可以使用
dplyr
tidyr
来执行此操作

首先,缩短df$长度:

df <- data.frame(length = c(1.5e+07, 2.5e+07), grade = c(1000, 1000), company = "TEST")
df$length <- cut(df$length, breaks = seq(0, 1e+08, 1e+07))

我们猜不出
是什么意思。你应该发布完整的代码,或者至少关闭括号,这样我们就知道了。谢谢你的回复。我的意思是我不知道如何继续这个代码,所以我试图在下面的段落中解释我的问题。我通过添加括号进行了更正。我们猜不出
应该是什么意思。你应该发布完整的代码,或者至少关闭括号,这样我们就知道了。谢谢你的回复。我的意思是我不知道如何继续这个代码,所以我试图在下面的段落中解释我的问题。我通过添加括号进行了更正。谢谢您的回复。我必须等到我能够下载dplyr和tidyr,但我觉得它会起作用。但是我犯了错误,对于我的df,“等级”值不同于“1000”(介于-5和5之间),但看起来这无关紧要。好的,我想我明白发生了什么。但是,我希望将这些值添加到原始df中,而不是“仅”在新的数据帧中显示它们。如果我尝试df%%>%left_join(data.frame(length=levels(df$length)),)%%>%complete(length,company)%%>%filter(!is.na(company))%%>%mutate(grade=ifelse(is.na(grade),1000,grade)),它会将它们添加到上面-例如:
df谢谢!我会证实你的答案。顺便说一句,我的“真实”数据框只包含几个不需要修改或添加值的列,但我认为我仍然应该在这个脚本的某个地方添加它们。我应该只修改dataframe和complete()参数吗?再次感谢您,如果之前没有值,那么额外的列将具有NA。如果您想要其他内容,请查看
?complete
中的
fill
参数,谢谢您的回复。我必须等到我能够下载dplyr和tidyr,但我觉得它会起作用。但是我犯了错误,对于我的df,“等级”值不同于“1000”(介于-5和5之间),但看起来这无关紧要。好的,我想我明白发生了什么。但是,我希望将这些值添加到原始df中,而不是“仅”在新的数据帧中显示它们。如果我尝试df%%>%left_join(data.frame(length=levels(df$length)),)%%>%complete(length,company)%%>%filter(!is.na(company))%%>%mutate(grade=ifelse(is.na(grade),1000,grade)),它会将它们添加到上面-例如:
df谢谢!我会证实你的答案。顺便说一句,我的“真实”数据框只包含几个不需要修改或添加值的列,但我认为我仍然应该在这个脚本的某个地方添加它们。我应该只修改dataframe和complete()参数吗?再次感谢您,如果之前没有值,那么额外的列将具有NA。如果您想要其他内容,请查看
?complete
中的
fill
参数
library(dplyr)
library(tidyr)
df %>% left_join(data.frame(length = levels(df$length)), .) %>%
       complete(length, company) %>%
       filter(!is.na(company)) %>%
       mutate(grade = ifelse(is.na(grade), 1000, grade)) 

Source: local data frame [10 x 3]

          length company grade
          (fctr)  (fctr) (dbl)
1      (0,1e+07]    TEST  1000
2  (1e+07,2e+07]    TEST  1000
3  (2e+07,3e+07]    TEST  1000
4  (3e+07,4e+07]    TEST  1000
5  (4e+07,5e+07]    TEST  1000
6  (5e+07,6e+07]    TEST  1000
7  (6e+07,7e+07]    TEST  1000
8  (7e+07,8e+07]    TEST  1000
9  (8e+07,9e+07]    TEST  1000
10 (9e+07,1e+08]    TEST  1000