排列数据,如果某些列没有值,则创建一个新列并在其中添加该值
TO arrange the data such that if the some column have no values then create a new column and add that value in that
我有一个数据框,我想复制 STATE 并将其粘贴到另一列。我该怎么办,请帮我解决这个问题
Market Origin Variety
1 Andhra Pradesh
2 Achanta 32 MTU-1010
3 Addanki 4 B P T
4 Akiveedu 2 MTU-1010
5 Assam
6 Amadalavalasa 60 Paddy
我想要这个:
Market Origin Variety STATE
2 Achanta 32 MTU-1010 Andra Pradesh
3 Addanki 4 B P T Andra Pradesh
4 Addanki 2 MTU-1010 Andra Pradesh
6 Amadalavalasa 60 Paddy Assam
library(plyr)
abc <- ddply(abc,.variables= c("Market",
"Origin","Variety"),
function(t) {
x <- t$Market
abc <- cbind(abc,STATE = x)
}
)
##The below code is working fine but the above code is not working according to my need
abc <- abc[ ! ( abc$Origin =="" & abc$Variety== "") , ]
这是一个基本的 for
循环解决方案。
让我们从一些数据开始:
x <- data.frame(Market = c("State A", "City A", "City B", "City C", "State B", "City A"),
Origin = c(NA, 32, 4, 2, NA, 60))
然后我们创建一个State Variable
和一个结果数据框:
x$State <- NA
res <- x[0, ]
之后我们遍历所有行并检查条件。对于值为 Origin
的行,将插入州。
for (i in 1:nrow(x)){
if (is.na(x$Origin[i])){
statetmp <- x$Market[i]
} else {
newrow <- x[i,]
newrow$State <- statetmp
res <- rbind(res, newrow)
}
}
res
# Market Origin State
# 2 City A 32 State A
# 3 City B 4 State A
# 4 City C 2 State A
# 6 City A 60 State B
你也可以试试:
df <- data.frame(Market = c("State A", "City A", "City B", "City C", "State B", "City A"),
Origin = c(NA, 32, 4, 2, NA, 60))
library(tidyverse)
library(zoo)
df %>%
mutate(state = if_else(is.na(Origin), Market, NULL)) %>%
mutate(state = na.locf(state)) %>%
filter(!is.na(Origin))
给出:
Market Origin state
1 City A 32 State A
2 City B 4 State A
3 City C 2 State A
4 City A 60 State B
我有一个数据框,我想复制 STATE 并将其粘贴到另一列。我该怎么办,请帮我解决这个问题
Market Origin Variety
1 Andhra Pradesh
2 Achanta 32 MTU-1010
3 Addanki 4 B P T
4 Akiveedu 2 MTU-1010
5 Assam
6 Amadalavalasa 60 Paddy
我想要这个:
Market Origin Variety STATE
2 Achanta 32 MTU-1010 Andra Pradesh
3 Addanki 4 B P T Andra Pradesh
4 Addanki 2 MTU-1010 Andra Pradesh
6 Amadalavalasa 60 Paddy Assam
library(plyr)
abc <- ddply(abc,.variables= c("Market",
"Origin","Variety"),
function(t) {
x <- t$Market
abc <- cbind(abc,STATE = x)
}
)
##The below code is working fine but the above code is not working according to my need
abc <- abc[ ! ( abc$Origin =="" & abc$Variety== "") , ]
这是一个基本的 for
循环解决方案。
让我们从一些数据开始:
x <- data.frame(Market = c("State A", "City A", "City B", "City C", "State B", "City A"),
Origin = c(NA, 32, 4, 2, NA, 60))
然后我们创建一个State Variable
和一个结果数据框:
x$State <- NA
res <- x[0, ]
之后我们遍历所有行并检查条件。对于值为 Origin
的行,将插入州。
for (i in 1:nrow(x)){
if (is.na(x$Origin[i])){
statetmp <- x$Market[i]
} else {
newrow <- x[i,]
newrow$State <- statetmp
res <- rbind(res, newrow)
}
}
res
# Market Origin State
# 2 City A 32 State A
# 3 City B 4 State A
# 4 City C 2 State A
# 6 City A 60 State B
你也可以试试:
df <- data.frame(Market = c("State A", "City A", "City B", "City C", "State B", "City A"),
Origin = c(NA, 32, 4, 2, NA, 60))
library(tidyverse)
library(zoo)
df %>%
mutate(state = if_else(is.na(Origin), Market, NULL)) %>%
mutate(state = na.locf(state)) %>%
filter(!is.na(Origin))
给出:
Market Origin state
1 City A 32 State A
2 City B 4 State A
3 City C 2 State A
4 City A 60 State B