我的数据针对每个制裁年制定了制裁措施。有5种类型的定向制裁,但由于我有兴趣查看整体制裁而不是他们的具体类型,我想创建一个新专栏,表示在某一年内是否实施了全面的定向制裁。
<div class="list card" ng-model="tweet" ng-repeat="text in tweet">
<div class="item item-avatar">
<img ng-src="{{text.profileImage}}">
<h2>@{{text.screen_name}}</h2>
<p>{{correctTimestring(text.timeAt) | date:'medium'}}</p>
</div>
<div class="item item-body">
<img src="{{ newImage || text.image[0].imageurl }}" class="full-image">
<div ng-model="image" ng-repeat="data in text.image">
<div class="item item-avatar">
<img src="{{data.imageurl}}" class="miniImage">
</div>
</div>
<p>
{{text.text}}
</p>
<p>
<a class="item item-icon-left assertive" href="#">
<i class="icon ion-social-twitter-outline"></i> Open Link
</a>
</p>
</div>
</div>
我希望它看起来如下:
df1 <- data.frame(Country = 'Angola',
Asset_freeze = c(1, 0),
Sectoral = c(1, 0),
Commodity = c(1, 0),
Diplomatic = c(1, 0),
Individual = c(1, 0),
Year = c('1993', '1994', '1995')
Country Asset_freeze Sectoral Commodity Diplomatic Individual Year
(chr) (dbl) (dbl) (dbl) (dbl) (dbl) (int)
1 Angola 0 1 1 0 0 1993
2 Angola 0 1 1 0 0 1994
3 Angola 0 1 1 0 0 1995
我怎么能得到这个?感谢
答案 0 :(得分:3)
您可以对包含5种rowSums
类型的列进行行向求和(Sanctions
)并检查是否施加了任何制裁,然后使用as.numeric
将布尔值转换为数字
cbind(df1[c("Country", "Year")], Sanctions = as.numeric(rowSums(df1[, 2:6]) > 0))
# Country Year Sanctions
#1 Angola 1993 1
#2 Angola 1994 1
#3 Angola 1995 1
答案 1 :(得分:2)
您还可以使用cbind
,apply
和ifelse
的组合:
cbind(df1[,c(1,7)], Sanctions=apply(df1[,2:6], 1, function(x) {
ifelse(any(x==1), 1, 0)
}))
Country Year Sanctions
Angola 1993 1
Angola 1994 1
Angola 1995 1
正如@Bazz所建议的那样,可以通过以下方式缩短这一点:
cbind(df1[,c(1,7)], Sanctions=as.numeric(apply(df1[,2:6], 1, any)))
此处,列按索引编号而非名称选择。但如果你愿意,你可以轻松地按名称抓取列。
我希望这会有所帮助。
答案 2 :(得分:2)
您可以使用dplyr
,结果命令会传达您想要实现的目标:
library(dplyr)
df1 %>% group_by(Country, Year) %>%
mutate(Sanctions = as.numeric(any(Asset_freeze, Sectoral, Commodity, Diplomatic, Individual))) %>%
select(Country, Year, Sanctions)
## Country Year Sanctions
## <fctr> <fctr> <dbl>
##1 Angola 1993 1
##2 Angola 1994 1
##3 Angola 1995 1
答案 3 :(得分:2)
我们可以使用pmax
作为第2:6列,它应该会自动获取最大值
cbind(df1[c("Country", "Year")], Sanctions = do.call(pmax, df1[2:6]))
# Country Year Sanctions
#1 Angola 1993 1
#2 Angola 1994 1
#3 Angola 1995 1
答案 4 :(得分:2)
使用data.table
:
require(data.table)
setDT(df1)
NSanc <- 5L
df1[, list(Sanctions = do.call(any, .SD)),
by = c("Country", "Year"),
.SDcols = 2:(NSanc + 1)]
NSanc是制裁类型的数量。