考虑以下示例
data <- data_frame(name = c('A','B','C','C',NA,'D'))
> data
# A tibble: 6 × 1
name
<chr>
1 A
2 B
3 C
4 C
5 <NA>
6 D
在此,我知道变量name
实际上映射到'A' -> 'one'
和'B' -> 'two'
。我只想创建一个获取映射值的变量。当然,在我的原始数据集中,我还有更多要映射的案例。
不的工作如下。
data <- data %>%
mutate(mapping = ifelse(name == 'A', 'one', name),
mapping = ifelse(name == 'B', 'two', name))
> data
# A tibble: 6 × 2
name mapping
<chr> <chr>
1 A A
2 B two
3 C C
4 C C
5 <NA> <NA>
6 D D
这里有什么问题?在dplyr
中最有效的方法是什么?
非常感谢!
答案 0 :(得分:9)
如果你想避免嵌套 //for header
<head>
<script type="text/javascript" src="{{ URL::asset('src/js/jquery-1.10.2.js') }}"></script>
<script type="text/javascript" src="{{ URL::asset('src/js/jquery-ui.js') }}"></script>
<link rel="stylesheet" href="{{ URL::to('src/css/jquery-ui.css') }}">
</head>
//body
<div class="col-sm-6 feature" >
<div class="ui-widget">
<label for="skills">Skills: </label>
<input type="text" class="search_keyword" id="skills" placeholder="Search.." name="skills" />
</div>
<script>
$(function() {
$( "#skills" ).autocomplete({
source: "{{URL::route('auto')}}"
//source: ["a","b"]
});
});
</script>
</div><!-- end feature -->
//route
Route::get('/', function () {
return view('welcome');
});
Route::get('/auto', [
'uses' => 'SearchController@AutoSug',
'as' => 'auto'
]);
//controller
class SearchController extends Controller
{
public function AutoSug()
{
$auto_s = DB::table('skills')
->pluck('skill');
return response()->json($auto_s);
}
}
,你应该简单地创建一个映射数据框和内连接。
ifelse
答案 1 :(得分:1)
对于两个值,您可以尝试类似:
data <- data %>%
mutate(mapping = ifelse(name == 'A', 'one',
ifelse(name == 'B', 'two', 'other')))
然而,您最好创建一个包含地图的单独数据框,然后使用dplyr :: left_join()将其添加到主df中。
答案 2 :(得分:1)
data %>% mutate(mapping = recode(name, A="one", B="two"))
当没有太多替换时,重新编码可能很方便。