根据匹配条件将数据框中的值从一列移动到另一列

时间:2016-09-06 09:39:59

标签: json r dataframe

我正在接收来自JSON对象的输出,但是JSON返回三个字段,有时两个somtimes一个,具体取决于输入。结果我有一个如下所示的数据框:

       mixed     score     type
1          1  0.018323  positive
2       <NA> <NA>        neutral
3       <NA> -0.566558  negative     
4       <NA>  0.473484  positive     
5       <NA>  0.856743  positive     
6       <NA> -0.422655  negative  

Mixed可以取值1或0 分数可以在-1和+1之间取正值或负值 类型可以取值为正,负或中性

我想知道如何重新排列data.frame中的值,以便它们位于正确的列中,即

@

1 个答案:

答案 0 :(得分:0)

根本不是一个优雅的解决方案,但我能想出最好的解决方案。

### Seeds initial Dataframe 


mixed = c("1", "neutral", "0.473484", "-0.566558", "0.856743",  "-0.422655",  "-0.692675") 
score = c("0.0183232", "0", "positive", "negative", "positive", "negative", "negative")
type = c("positive", "0", "0", "0", "0", "0", "0")

 df = data.frame(mixed, score, type) 


 # Create a new DF (3 cols by nrow ize) for output
 df <- as.data.frame(matrix(0, ncol = 3, nrow = i))
 setnames(df, old=c("V1","V2", "V3"), new=c("mixed", "score", "type"))
df 

 # Create a 2nd new DF (3 cols by nrow ize) for output
df.2 <- as.data.frame(matrix(0, ncol = 3, nrow = i))
 setnames(df.2, old=c("V1","V2", "V3"), new=c("mixed", "score", "type"))
 df.2 




#Check each column cell by cell if it does copy it do the shadow dataframe
# Set all <NA> values to Null
df[is.na(df)] <- 0



# Set interation length to column length
l <- 51

# Checked the mixed column for '1' and then copy it to the new frame
for(l in 1:l)

  if (df$mixed[l] == '1')
  {
    df.2$mixed[l] <-df$mixed[l]
  } 

# Checked the mixed column for a value which is less than 1 and then copy it to the score column in the new  frame

for(l in 1:l)

  if (df$mixed[l] < '1')
  {
    df.2$score[l] <-df$mixed[l]
  }

# Checked the mixed column for positive/negative/neutral and then copy it to the type column in the new  frame

for(l in 1:l)

  if (df$mixed[l] == "positive" | df$mixed[l] == "negative" | df$mixed[l] == "neutral")
  {
    df.2$type[l] <-df$mixed[l]
  }


# Checked the score column for '1' and then copy it to mixed column in  the new frame
for(l in 1:l)

  if (df$score[l] == '1')
  {
    df.2$mixed[l] <-df$score[l]
  } 

# Checked the score column for a value which is less than 1 and then copy it to the score column in the new  frame

for(l in 1:l)

  if (df$score[l] < '1')
  {
    df.2$score[l] <-df$score[l]
  }

# Checked the score column for positive/negative/neutral and then copy it to the type column in the new  frame

for(l in 1:l)

  if (df$score[l] == "positive" | df$score[l] == "negative" | df$score[l] == "neutral")
  {
    df.2$type[l] <-df$score[l]
  }



# Checked the type column for '1' and then copy it to mixed column in  the new frame **This one works***
for(l in 1:l)

  if (df$type[l] == '1')
  {
    df.2$mixed[l] <-df$type[l]
  } 

# Checked the type column for a value which is less than 1 and then copy it to the score column in the new  frame ** this one is erasing data in the new frame**

for(l in 1:l)

  if (df$type[l] < '1')
  {
    df.2$score[l] <-df$type[l]
  }

# Checked the type column for positive/negative/neutral and then copy it to the type column in the new  frame **This one works***

for(l in 1:l)

  if (df$type[l] == "positive" | df$type[l] == "negative" | df$type[l] == "neutral")
  {
    df.2$type[l] <-df$type[l]
  }